undefined

3 POST和GET请求区别的常见误区

3.1 请求参数长度限制:GET请求长度最多1024kb,POST对请求数据没有限制

关于此点,在HTTP协议中没有对URL长度进行限制,这个限制是不同的浏览器及服务器由于有不同的规范而带来的限制。

3.2 GET请求一定不能用request body传输数据

GET可以带request body,但不能保证一定能被接收到。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你读出数据,有些服务器直接忽略。

3.3 POST比GET安全性要高

这里的安全是相对性,通过GET提交的数据都将显示到URL上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而POST不会。另外GET提交数据还可能会造成CSRF攻击。

3.4 GET产生一个TCP数据包,POST产生两个TCP数据包

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200 OK(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 OK(返回数据)。注意,尽管POST请求会分两次,但body 是紧随在 header 后面发送的,根本不存在『等待服务器响应』一说

4 POST和GET请求的区别小结

请求参数:GET请求参数是通过URL传递的,多个参数以&连接,POST请求放在request body中。
请求缓存:GET请求会被缓存,而POST请求不会,除非手动设置。
收藏为书签:GET请求支持,POST请求不支持。
安全性:POST比GET安全,GET请求在浏览器回退时是无害的,而POST会再次请求。
历史记录:GET请求参数会被完整保留在浏览历史记录里,而POST中的参数不会被保留。
编码方式:GET请求只能进行url编码,而POST支持多种编码方式。
对参数的数据类型:GET只接受ASCII字符,而POST没有限制。

这里还想补充说明一点,就是通过浏览器地址栏输入URL访问资源的方式都是GET请求。