【HTTP】get 和 post 两种基本请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法:Get,Post 和 Head方法
HTTP1.1新增了五种请求方法:Options,Put,Delete,Trace和Connect

HTTP Request Method方法

共计8种:
【HTTP】get 和 post 两种基本请求方法
【以上内容来自W3Cschool】

常用的两种请求方式就是我们常说的Post,Get请求方法。

Post请求和Get请求区别:

  1. Get在浏览器回退时不重复提交请求,而Post会再次提交请求。
  2. Get产生的URL地址可以被Bookmark,而Post不可以。
  3. Get请求会被浏览器主动Cache,而post不会,除非手动设置。
  4. Get请求只能进行url编码,而post支持多种编码方式。
  5. Get请求参数被毁完整保留在浏览器历史记录里,而Post中的参数不会被保留。
  6. Get请求在url中传递的参数是有长度限制的,而Post没有。
  7. 对参数的数据类型,Get只接受ASCII字符,而Post没有限制。
  8. Get比Post更不安全,因为Get会把信息暴露在URL上,所以不能用来传送敏感信息。
  9. Get参数通过URL传递,而Post是放在Requset body中。

上面这些都是一些比较官方的解释。从本质上来说,Get和Post请求并没有区别,它们只不过是HTTP协议中两种不同的发送请求的方式而已。

HTTP底层遵循的协议是TCP/IP协议,所以Get和Post请求也遵循TCP/IP协议。也就是说,Get和Post都是TCP链接。

TCP就像交通工具一样,用来运输东西,TCP用来传输数据,在传输数据过程中,要经过三次握手,所以它是相对(UDP)安全的。在交通工具中,由于要在不同的环境中使用,所以会有天上飞的/陆上跑的/水里游的。在同一环境下也会有多种类型的交通工具。比如有装载货物的大/小货车,有装载人的大/小客车,汽车等。不同的交通工具会被贴上不同的标签,在HTTP请求方式中,根据用途不同,也会有不同的标签,这些被贴上的标签,就是用来识别这些请求方式的。所以Post和Get请求本质上都是基于TCP/IP协议,用于传输数据;只不过就是传输数据的方式是不同。就像我们从公司回到家里一样,可以步行/骑电车/自驾,目标都是家,只是回到家的方式不同罢了。不同的方式有它自己独特的特点,优势与劣势等。

除了上面说到的这些,Get和Post请求还有一个重要的区别:Get产生一个TCP数据包,Post产生两个TCP数据包。

在Get请求方式中,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于Post,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。也就是说,如果用一辆货车从甲地往乙地运送一车货物,采用Get运送方式,货车会带着命令-乙呀,我要给你一车财富哦,并且在甲地装上货物,开往乙地,到达乙地后,乙给出应答。而采用Post运送方式,货车会先带着命令开往乙地,把请求-给你一车财富 告诉乙,此时要接收乙的反馈信息,然后再回到甲地装上财富,开往乙地,乙给出应答。

在网络良好情况下,两种请求方式的时间差并不大,而在网络环境较差的情况下,两次数据包的TCP(Post请求方式)能够很好的验证数据的完整性。

由于HTTP的规定和浏览器/服务器的不同,Get和Post请求在数据传送过程中可能会有一些不同。