我也不知道你记不记得这些知识点,反正我是忘了。
比较适合新人阅读
网上冲浪的时候看见有网友在问这个问题。想回答的时候发现。
做个笔记,复习一下。
GET和POST的区别
1.相对来说,POST请求更安全,GET请求不安全
1.GET请求参数会直接挂载在URL上。POST请求携带的参数在URL上看不见。
2.POST请求记录不会被保存在浏览器历史或web服务器日志中。但是GET请求会。
当然,以上是相对的。这不表示POST请求就绝对安全,其实。
从数据传输的角度来说,POST和GET都不是很安全,因为http协议本身是明文传输。对内行人来说,抓包解析GET和POST都是一样的。
GET请求入参挂载在URL上,很容易被看见。如下
2.GET请求可以缓存,POST请求不能缓存
GET请求一般用于数据和静态资源的获取,有些GET请求不用和数据库交互。比如一些静态资源和固定的字典表。所以可以使用缓存。
数据缓存👇(忘了从哪截的了)
静态资源缓存👇(来源百度网站)
POST请求则更多用于数据的新增和修改。新增数据无法具备固定内容。所以很多浏览器都不支持缓存POST请求。
3.GET请求有长度限制,POST请求没有长度限制
GET请求本身是没有长度限制的,但是URL有。不同的浏览器对于GET的长度限制也不一样。
IE:对IE浏览器URL的最大长度为2083个字符。
Firefox:对Firefox浏览器URL的最大长度为65536个字符。
Safari: 对Safari浏览器URL的最大长度为80000个字符。
Opera: 对Opera浏览器URL的最大长度为190000个字符。
Google(chrome):对Google浏览器URL的最大长度为8182个字符。
所以,在需要兼容IE的情况下,URL请求的长度最长只能有2083个字符。
4.GET只能传输字符串,POST可以传输多种类型数据
因为GET请求是挂载在URL上的,所以传输的数据类型只能是字符串,但是POST请求可以传输除字符串以外的数据,比如:视频,声音,图片,文档等。
5.GET请求入参在URL上,POST请求入参在Request body上
这是GET👇
这是POST
6.POST有可能产生两个数据包,GET只会发送一个数据包
GET请求在任何情况下都会把http header和data一次性发送完成。
POST在部分情况下,(这取决于 浏览器/发送方 和它的版本),会产生两个数据包。第一个tcp发送header,确认服务器可以响应并且具备接受数据的能力,响应100。第二个TCP包在第一个请求成功(100后)才会发送。包含data。如果第一个请求(header)失败,则data不进行发送。
常规来说POST发送两次数据包在速度上会比GET慢,但其实在网络环境好的情况下这个速度影响微乎其微。但是在网络环境差的情况下。POST发送两次数据包可以很好的校验数据完整性。
并不是任何情况下POST都会有两个数据包
7.刷新和回退的时候GET请求无害,POST数据会被重新提交
以前我一直没搞明白这一点区别的含义,怎么GET就无害了,POST就又会重新提交了。后来我明白了。
这点区别指向的是那些页面加载时候就默认执行的请求。
比如静态资源获取,刷新了就得重新加载吧。如果是GET,GET主要用重新获取数据,因为是获取,请求不会对数据产生什么危害,何况有时候还直接返回的缓存。所以无害。
再说POST,POST主要用于数据的修改/新增,针对默认执行的情况下,POST请求的每次执行都有可能改变数据库中的某一个值,比如文章的阅读量。刷新一下就+1(不信你刷一个试试)。所以这里说POST数据会被重新提交,这种提交他不一定有害,但确实不一定有用。
总结
- POST请求相对安全,GET请求相对不安全
- GET请求可以缓存,POST请求不能缓存
- GET请求有长度限制,POST请求没有长度限制
- GET只能传输字符串,POST可以传输多种类型数据
- GET请求入参在URL上,POST请求入参在Request body上
- POST有可能产生两个数据包,GET只会发送一个数据包
- 刷新和回退的时候GET请求无害,POST数据会被重新提交