先说相同点,只有了解了相同点之后才能理解为什么会发生混淆。两者都能向服务器发送数据,提交的“内容”[注1]的格式相同,都是var_1=value_1&var_2=value_2&....get 和 post 区别如字面,一个是get(获取),一个是post(发送)。get用来告诉服务器需要获取哪些内容(uri+query),向静态页面(uri)请求则直接返回文件内容给浏览器,向一个动态页面请求时可以提供查询参数(query)以获得相应内容。post用来向服务器提交内容,主要是为了提交,而不是为了请求内容,就是说post的初衷并不要求服务器返回内容[注2],只是提交内容让服务器处理(主要是存储或者处理之后再存储)。

get的长度限制在2048字节(由浏览器和服务器限制的,这是目前IE的数据,曾经是1024字节),很大程度上限制了get用来传递“存储数据”的数据的能力,所以还是老老实实用来做检索吧;post则无此限制(只是HTTP协议规范没有进行大小限制,但受限于服务器的处理能力),因此对于大的数据(一般来说需要存储的数据可能会比较大,比2048字节大)的传递有天然的优势,谁让它是 nature born post 呢

get提交的数据是放在url里,目的是灵活的向服务其提交检索请求,可以在地址栏随时修改数据以变更需要获取的内容,比如直接修改分页的编号就跳到另外一个分页了(当然也可能是 404)。post提交的数据放在http请求的正文里,目的在于提交数据并用于服务器端的存储,而不允许用户过多的更改相应数据(主要是相对于在url 修改要麻烦很多,url的修改只要点击地址栏输入字符就可以了),除非是专门跑来编辑数据的。

HTTP协议与get/post请求方式

1、HTTP

hypertext transfer protocol 超文本传输控制协议。

定义了浏览器与web服务器之间数据传输的方式与数据格式(W3C定义)。

2、数据传输的方式

(1)浏览器请求建立连接。

(2)浏览器向服务器发送请求。

(3)服务器处理请求

(4)服务器发送响应,然后立即关闭连接。

注:如果浏览器想向服务器再发送一个请求,需要重新请求建立连接。

3、数据格式

(1)请求数据包

1)请求行

请求方式(get/post) 请求资源的路径 HTTP协议版本(1.0/1.1)

2)若干消息头

浏览器与服务器之间通讯的一些约定。

比如,浏览器可以告诉服务器浏览器名称、版本等信息。

3)实体内容

如果是post方式,请求数据会存放到实体内容里面。

如果是get方式,会放到请求行中的请求资源路径之后。

(2)响应数据包

1)状态行

协议版本号状态码状态码的描述

状态码:

200 正常

300 请求的资源可在多处得到

400 错误请求

401 未授权

403 禁止访问

404 找不到资源

500 系统内部错误

…

2)若干消息头

比如服务器可以向浏览器发送cookie。

3)实体内容

服务器处理完之后的结果,一般要求浏览器显示的数据。

4、get/post请求方式

(1)get方式:

1)表单默认提交的方式

2)直接在浏览器地址栏输入地址

3)通过链接访问某个地址

(2)get方式的特点:

1)在地址栏会显示请求数据;

2)请求数据会放到请求资源路径后面;

3)get方式一般用于向服务器获取资源;

4)浏览器有可能缓存get方式访问过的数据。

(3)post方式:

设置表单method="post"。

(4)post方式的特点:

1)数据不会在地址栏显示;

2)数据会存放到实体内容里;

3)post方式一般用于向服务器提交数据;

(5)优缺点比较

get方式

post方式

提交的数据量有限制

(因为只能存放到请求行之后)

数据量大

(因为存放在实体内容里面)

不安全

(在浏览器地址栏能看到数据)

相对安全

(实体内容中的数据仍没有加密,可借助工具查看)

随机推荐

  1. kubectl get 输出格式

    常见的输出格式有: * custom-columns=<spec> # 根据自定义列名进行输出,逗号分隔 * custom-columns-file=<filename> # ...

  2. c++中new/operator new/placement new

    1. new/delete c++中的new(和对应的delete)是对堆内存进行申请和释放,且两个都不能被重载. 2. operator new/operator delete c++中如果想要实现 ...

  3. Android Framewrork资源类型有哪些?

    1. Google Framework res frameworks/base/core/res/res/values <public type="attr" name=&q ...

  4. Mac OS X运行程序出现bad interpreter: operation not permitted的解决方案

    最近想在我的mac笔记本上安装gvim,从官网上下载了程序后竟然非常诡异的双击无法打开,命令行执行时系统报错: /bin/sh bad interpreter operation not permit ...

  5. C#6.0语法特性

    1.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Na ...

  6. 查看、关闭登录到linux的终端

    基本概念: tty(终端设备的统称):tty一词源于Teletypes,原来指的是电传打字机,是通过串行线用打印机键盘阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适.终端是 ...

  7. jenkins前端构建

    nginx 安装yum install nginx //输入下载 or yum install epel-release //如果上一步安装失败 yum install nginx //再次下载 配置 ...

  8. Yii 后台防止表单提交

    第一种方法: 在AR类中设置rules()方法里面设置该属性为unique属性 Class Item extends \yii\db\ActiveRecord{ public function rul ...

  9. Golang学习 - builtin 包

    Go builtin包提供了go预先声明的函数.变量等的文档.这些函数变量等的实现其实并不是在builtin包里,只是为了方便文档组织. 这些内置的变量.函数.类型无需引入包即可使用. 默认提供的有: ...

  10. Python IDLE 安装与使用教程(调试、下载)

    原文:http://www.jb51.net/softjc/142580.html ---------------------------------------------------------- ...