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

 

posted @ 2019-07-17 17:40  足迹#  阅读(964)  评论(0编辑  收藏  举报