【Web篇02】Get请求和Post请求的区别

Web的面试题中经常会出现这么一道题,请简述Get请求和Post请求的区别,标准答案如下:

  1. get在浏览器回退时是无害的,post会再次提交请求;
  2. get产生的url地址可以被bookmark(加入标签),post不可以;
  3. get请求只能进行url编码,post可以进行多种编码;
  4. get请求参数会被完整保留在浏览器历史记录中,post不会(无痕浏览);
  5. 对参数的数据类型,get只接受ASCII字符,post没有限制;
  6. Get请求在url中传递的参数长度有限制,post没有;
  7. Get比post更不安全,因为参数直接暴露在url中,不能用来传递敏感信息;
  8. Get参数放在url中,post参数放在request body中;

两种都是HTTP请求的基本方法,最直观的区别就是get把参数包含在url中,而post通过request body传递参数;
但其实两者本质上并没有区别,底层都是TCP/IP,都是TCP类型的链接。

小结:
get和post本质都是TCP链接,只是由于HTTP规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同;get产生一个TCP数据包,post产生两个TCP数据包。
-> 对于get请求,浏览器把http header和data一起发送出去,服务器响应200(返回数据);
-> 对于post请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

这样看似get比post更有效,但实际上:
(1) get和post有自己的语义,不能随便混用;
(2) 网络好的时候,发一次包和两次包时间差别基本无视;而网络差的时候,两次包的tcp在验证数据包完整性上,有更大的优点;
(3) 并不是所有浏览器都会在post中发送两次包,比如火狐浏览器就只发送一次。

猜你喜欢

转载自blog.csdn.net/wx1528159409/article/details/83419666