GET与POST请求的区别

问题产生原因

http://www.jqhtml.com/13264.html

这篇爬虫入门文章时发现自己对“http”理解不够深刻。
特别是对GET和POST请求基本处于一直半解的状态,我觉得我在这方面可以做的更好!不多废话,下边进行get和post请求的学习

对GET和POST请求的基本理解

GET和POST是HTTP中发送请求的两种方法。
众所周知,我们在登陆一个网站时首先要打开浏览器,键入一个网址。一般一个网址中就包含了一个HTTP。
而Get和Post就是HTTP中用来发送请求的方法。即由客户端向服务器端发送请求两种方法

我们都知道HTTP的底层协议是TCP/IP,所以GET和POST请求依赖的底层协议也是TCP/IP,也就是说GET和POST可以实现的功能是大致相同的。即我们可以强行给GET加上request body,或者给POST加上url参数。
HTTP\Method\TCP

文章链接网上有位作者有个生动的比喻。他将TCP比作汽车;将HTTP比作交通规则;而GET和POST则比作汽车上的标签;浏览器、服务器比作运输公司。

我尝试复述一下他的讲解,加深自己的记忆,更希望可以帮助到互联网上的朋友。
我们从浏览器发送请求到服务器端。理论上我们可以往车顶上无限堆积货物(URL后加参数)。但浏览器和服务器端可不会这么默许,他们会采取限高策略,即限制URL的字节数量。一般浏览器是2K,服务器是64K。假如是GET请求,我们把数据偷偷藏在request body中。不同的服务器有不同的处理方式,有的会进行卸货,即读取数据,但有的不会。

小结一

虽然本质上GET和POST请求都是基于TCP协议的,但出于需要,浏览器、服务器和HTTP对其作了限制,也就展现出了不同。

进阶

GET请求产生一个TCP数据包;
POST请求产生两个TCP数据包;

简单说就是,
每向服务器发送一个GET请求,包含"http header"和"data"。服务器响应200(返回数据);
每向服务器发送一个POST请求,浏览器会先发送"header"。服务器响应100 continue,浏览器再发送data。服务器响应200 ok(返回数据)。
yahoo团队曾经提议将所有POST请求全部替换位GET请求。
但不能这么做。
因为要进入小结二了哈哈哈!

小结二

1、GET和POST都有各自的语义(挖个小坑以后来填)参考文章
2、据研究,在网络环境好的情况下,两者无差别。但在网络环境较差时,两次包的TCP在验证数据完整性上有较大的优势。
3、并不是所有浏览器都发会在POST时发送两次包,比如FireFox就只发送一次。

迷迷糊糊

最近越发觉得语数英的重要性,一直都很贪玩。在以前有时候即使知识点模糊,也可以连蒙带猜——蒙混过关。但写代码以后就不行了。永远警醒自己,要深入程序的每一个部分。解构系统,融会贯通。

猜你喜欢

转载自blog.csdn.net/chenmo2019/article/details/83418753