get和post的区别

w3school标准答案

 

 

精髓来了:

get和post是HTTP协议中两种发送请求的方法。

HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议

HTTP的底层是TCP/IP。所以get和post的底层也是TCP/IP。也就是说,get/post都是TCP连接。

get和post能做的事情是一样的,如果给get加上request body,给post带上url参数,技术上完全可以行的通。

TCP就好像汽车,我们用汽车来运输数据,它很可靠,从来不会发生什么丢少物件的事情,但是如果路上跑的车都是相同的,那世界就会是一团乱麻。

送急件的汽车可能被前面装载货物的汽车拦堵在路上,于是交通规则就产生了---http协议

HTTP给汽车运输设定了好几个服务类别,有get,post,put,delete.

于是,规定:当执行get请求的时候,要贴上“GET”标签,将货物放在车顶(url).
                     执行post请求的时候,要贴上“POST”标签,将货物放在车厢(request body)中。

当然,你开get车,将货物放在车厢里,也可以开post车时,将货物放在车顶。

HTTP只是个行为准测,TCP才是实现POST AND GET的方法。

整个交通系统中,还包含了另一个重要的角色:运输公司。不同的浏览器(发送http请求)和服务器(接受http请求)就是不同的运输公司。虽然可以在车顶上或者车厢中无限制的放置货物,但是浏览器通常都会限制url的长度,在2k个字节,服务器最多处理64k的url。超过的部分,恕不处理。

 

 

举例说明:倘若你用GET方法,却在车厢(request body)中放置货物,不同服务器的处理方式也是不同的,有的帮忙卸载数据,有的就直接忽略。

结论:虽然GET可以带request body,但不一定保证会被接收。

GET和POST本质上就是TCP连接,并无差别,是因为HTTP协议规定和浏览器和服务器的限制导致了她们在应用过程中体现出一些不同。

GET和POST还有一个重大的区别就是:GET产生一个数据包,POST产生两个数据包。

解释一下,就是:GET将http header 和data一起发送出去,服务器响应200

POST将http header 先发送出去,服务器响应100 continue ,浏览器在在发送data,服务器响应200。

 

因为POST需要两步,所以看起来GET比POST更加有效果,
但是:在网络较差的时候,两次包的TCP在验证数据包的完整性上,有非常大的优点。
并不是所有的浏览器中都会给POST发送2次包的,firefox就只发送一次。

 

至于面试,老老实实回答还是有必要的,暂时为以下答案:

  1. get在浏览器回退时是无害的,而post会再次请求
  2. get产生的url地址可以被收藏,而post不会
  3. get请求会被浏览器主动缓存,而post不会,除非手动设置
  4. get请求只能进行url编码,而post支持多种编码方式
  5. get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留
  6. get 请求在url中传送的参数有长度限制,而post没有
  7. 对参数的数据类型,get只接受ascll字符,而post没有限制
  8. get没有post安全,因为参数直接暴露在url上,所以不能用来传递敏感信息
  9. get参数通过url传递,post放在request body中

(记不住全部的,重点回答出1,2,5,6,9这几点即可)

posted @ 2019-10-14 16:23  donleo123  阅读(437)  评论(0编辑  收藏  举报