GET和POST请求

关于前端中的GET和POST请求,经常会被问到,就把自己能接受的说法记录一下,采用倒叙的方式,先写结论,再说结论怎么来的。

1 结论

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

2 关于前一句话:TCP是本质

关于TCP我还没具体吃透,就引用一下别人的博客了。GET和POST有一个重大区别,GET产生一个TCP数据包;POST产生两个TCP数据包。

3 关于后一句话:你以为的不同其实都是应用层面

平时我们会看到很多关于get和post这样那样不同的描述,其实都是指的应用层面,并不是本质。前面说了,本质是TCP,我们所谓的不同,都是指它们的用法上的不同,这些用法只是一种规定或者说规范,就像交通规则一样,我们遵守就行。用法上的不同参见下面小标题的内容。

3.1 HTTP相关

自己看了一些http相关的东西,感觉这个我比较能接受。

HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE,作用就是我们平常经常涉及的4个操作:增删查改

GET

从服务器端读取数据

POST

向服务器端添加新数据

PUT

更新服务器端已有数据

DELETE

删除服务器端数据

我比较能接受以下用法
(1)GET请求:读取数据,查询就行,不要做增、删、改操作。
(2)POST请求:增、删、改都行。
(3)POST和PUT请求:严格来说一个是添加新数据,一个是更新已有数据,但是平时没怎么区分它们。

在企业项目中,GET,POST,PUT,DELETE这四个经常用到,有时间可以关注一下!!!
3.2 W3C的说法(也是用法层面)

GET请求在URL中传送的参数是有长度限制的,而POST没有。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET在浏览器回退时是无害的,而POST会再次提交请求。

4 在企业里(现实总是残忍的)

进企业实习后,项目都是前后端分离的,我问过师傅GET和POST请求区别,她说“没有区别”。我很疑惑地问了一句“那我们为什么有的用了GET,有的用了POST",我得到的回答是"GET和POST这部分请求设定和链接都是后端写死给前端的,直接使用就行"。求问此刻的心理阴影面积,233333333