您现在的位置是:首页 >PHP网站首页PHP

99%的人都理解错HTTP中Get与Post的区别,来看看?

简介Get和Post是Http请求的两种基本方法。

Get和Post是Http请求的两种基本方法。要说他们间的区别,接触过开发的肯定会说出一些,如果在面试中被问到,心中更是充满了自信,毕竟毕竟自己写过了很多的Get和Post请求。

输入图片说明

正如大多数人一样,你会轻轻松松给出如下“标准答案”:

输入图片说明

答案整理来自于W3school 然后就会期待面试者的赞许眼神,然而事实却是这样的,“很遗憾,这不是我们想要的答案”

输入图片说明

我一开始也是被震惊了,然后迫不及待的去挖掘了真相,请扪心自问,如果别人对你说,Get和Post本质上没有区别,你会信吗?估计连自己都说服不了。来,一起来看看吧。 Http的底层是Tcp/Ip。所以get和Post的底层也是Tcp/Ip,换句话说,Get和Post做的事情是一样一样的。如果你想要给Get加上Request Body,给Post加上Url参数,技术上完全是可行的。 那,标准答案的那些区别是怎么回事。

输入图片说明

接触过Tcp/Ip就知道,用Tcp协议传输数据是很可靠的,不会发生丢失数据的现象。但是随便传输数据很容易造成混乱。然后Http就像一个交通规则一样,定义了Get请求和Post请求。数据传输方式也进行了统一,Http只是个准则,而Tcp才是Get和Post怎么实现的基本。

输入图片说明

另外,不同的浏览器(发起Http请求)和服务器(接受Http请求)。如果数据量太多,对浏览器和服务器都有很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到。 到了这里,至少我们知道了,GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

输入图片说明

文章评论

Top