GET和POST的区别
Posted baby-zuji
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GET和POST的区别相关的知识,希望对你有一定的参考价值。
首先,GET和POST是HTTP请求的两种基本方法~
“江湖上”流传的GET和POST区别
1、GET提交的数据会放在URL之后,以 ?分割URL和传输数据,参数之间用 & 相连,如 EditPosts.aspx?name=boKeYuan&id=123456;POST方法是把提交的数据放在HTTP包的Body中
2、GET提交的数据大小有限制(注意:Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制,这个限制是特定的浏览器及服务器对它的限制);POST方法提交的数据没有限制
3、对参数的数据类型,GET只接受ASCII字符;而POST没有限制
4、GET请求参数会被完整保留在浏览器历史记录里;而POST中的参数不会被保留
5、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
HTTP
1、HTTP是是基于TCP/IP协议族的关于数据如何在万维网中通信的协议。HTTP定义了很多与服务器交互得方法,最基本的有四种:GET、POST、PUT、DELETE,这四个方法对应着对请求资源的查、改、增、删 4个操作。本篇文章只介绍GET和POST。
2、HTTP的底层是TCP/IP,所以GET和POST底层也是TCP/IP。封装好的HTTP报文是要交给TCP去处理的。
TCP
1、TCP是运输层的协议,将应用层传过来的HTTP报文分割成报文段,传送给通信的对方,TCP是可靠交付,能够保证数据完整的传达给对方。
2、在整个万维网世界中,会有无数个TCP连接,怎么区分这些TCP连接呢?这就要用到协议规范HTTP了,HTTP指明每一个TCP连接是POST或者GET。
HTTP只是个行为准则,而TCP才是POST和GET怎么实现的基本。
浏览器和服务器
1、TCP在浏览器和服务器之间建立连接,并且在两者之间按照客户需求传输信息(数据)。如果传输的信息过大,对于浏览器和服务器来说都是很大的负担,大多数浏览器都会限制 URL 在2K个字节,而大多数服务器最多处理64K大小的 URL。超出的部分,直接丢弃~
2、上面提到过,GET方法的数据是放在 URL 中的,如果你在 request body 中偷偷藏了数据,不同的服务器处理方式也是不同的,有的会“好心”读出,有的则“视而不见”~
3、说到这里,你应该明白了,GET和POST本质上就是TCP连接。
GET和POST的根本区别
GET产生一个数据包,POST产生两个数据包
多数浏览器(Firefox就只发送一次)对于POST采用两阶段发送数据:先发送请求头(header数据),再发送请求体(body部分)。这会导致在传输层中出现两次TCP连接,对于TCP来说,通信次数越多可靠性越低,能在一次连接中传输完需要的消息是最可靠的。
而GET方法只需要建立一次连接就能发送所有数据了。
使用情况
POST和GET各有自己的优缺点,根据需求来选择使用GET或POST。
1、比如有人这样问,POST需要两步,时间上消耗的更多,能否用GET来替换POST?
显然不能
- GET与POST都有自己的语义,不能随便混用
- 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次
2、GET不安全,能否全部用POST?
显然也不能
- 对数据请求频繁,数据不敏感且数据量在普通浏览器最小限定的2k范围内,这样的情况最适合使用GET
以上是关于GET和POST的区别的主要内容,如果未能解决你的问题,请参考以下文章