likes
comments
collection
share

GET请求和POST请求的区别,你还记得吗?

作者站长头像
站长
· 阅读数 15

我也不知道你记不记得这些知识点,反正我是忘了。

比较适合新人阅读

网上冲浪的时候看见有网友在问这个问题。想回答的时候发现。

GET请求和POST请求的区别,你还记得吗?

做个笔记,复习一下。

GET和POST的区别

1.相对来说,POST请求更安全,GET请求不安全

1.GET请求参数会直接挂载在URL上。POST请求携带的参数在URL上看不见。 2.POST请求记录不会被保存在浏览器历史或web服务器日志中。但是GET请求会。

当然,以上是相对的。这不表示POST请求就绝对安全,其实。

从数据传输的角度来说,POST和GET都不是很安全,因为http协议本身是明文传输。对内行人来说,抓包解析GET和POST都是一样的。

GET请求入参挂载在URL上,很容易被看见。如下

GET请求和POST请求的区别,你还记得吗?

2.GET请求可以缓存,POST请求不能缓存

GET请求一般用于数据和静态资源的获取,有些GET请求不用和数据库交互。比如一些静态资源和固定的字典表。所以可以使用缓存。

数据缓存👇(忘了从哪截的了) GET请求和POST请求的区别,你还记得吗?

静态资源缓存👇(来源百度网站)

GET请求和POST请求的区别,你还记得吗?

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👇

GET请求和POST请求的区别,你还记得吗?

这是POST

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数据会被重新提交,这种提交他不一定有害,但确实不一定有用。

总结

  1. POST请求相对安全,GET请求相对不安全
  2. GET请求可以缓存,POST请求不能缓存
  3. GET请求有长度限制,POST请求没有长度限制
  4. GET只能传输字符串,POST可以传输多种类型数据
  5. GET请求入参在URL上,POST请求入参在Request body上
  6. POST有可能产生两个数据包,GET只会发送一个数据包
  7. 刷新和回退的时候GET请求无害,POST数据会被重新提交

GET请求和POST请求的区别,你还记得吗?