GET和POST的区别

说到GETPOST的区别,最直观的就是GET把请求参数包含在URL中,而POST请求是通过request body传递参数。先来看一下GETPOST表面上的区别

  • GET在浏览器回退或者刷新时是无害,而POST可能会再提交一次请求去修改数据
  • GET请求的URL是可以被收藏的,而POST请求的URL是不可以被浏览器收藏的
  • GET请求是可以被浏览器缓存的,而POST请求是不会被浏览器缓存的
  • GET编码类型为application/x-www-form-urlencoded,而POST支持多种编码方式
  • GET的请求参数的长度是有限制的,而POST的请求参数则没有限制
  • GET的数据类型只允许ASCII 字符,POST没有限制,允许请求参数为二进制数据
  • GETPOST更不安全,因为参数会直接暴露在URL中,同时参数会被保存到浏览器历史或web服务器中
  • GET只会产生一个数据包,而POST部分时候会产生两个数据包

上述的这些区别在大部分浏览器都是存在的,但这不属于HTTP协议的硬性规定,只是为了统一规范的标准,大多数浏览器都遵循了这个规范。

刷新,收藏以及缓存的区别

HTTP规范里,GETPOST的区别:

  • GET用于请求数据,不会修改数据,是具有幂等性,就是多次请求的结果是一样的
  • POST用于数据的修改,不具有幂等性,多次请求的结果是不一样的

有了这两点区别,我们就很容易理解为什么浏览器会有这三点标准了。浏览器都只是为了预防用户多次点击造成多次提交而造成错误。当然,服务端把GET请求实现成有副作用的,POST实现成无副作用的,这样是不会报错的。但是就容易出现用户多次提交有副作用的GET请求而没有弹出提示窗而出现可能数据异常,用户多次提交无副作用的POST请求但浏览器却一直弹出提示窗而造成用户体验极差。至于浏览器缓存问题,POST请求是需要修改数据的,那用户第二次请求修改数据当然不能显示缓存的内容,而不做数据的处理。

参数长度的限制

HTTP协议中没有限制URLBODY的长度问题,对URL长度的限制大多数是浏览器和服务端出于安全考虑因素而做出的限制,服务端处理长URL需要消耗较多的性能。

POST请求会发送两个TCP包

有些文章中提到,POST会将 headerbody 分开发送,先发送 header,服务端返回 100 状态码再发送 bodyHTTP协议中没有明确指出POST请求需要发送两个TCP包,发送两次TCP包只是浏览器和服务器为节省网络资源而做出的规范。所以,headerbody 分开发送是部分浏览器或框架的请求方法,不属于 POST 必然行为。

POST方法比GET方法安全

因为POST的数据在地址栏不可见或者GET参数会保存到浏览器历史而做出POSTGET请求安全的结论个人认为这似乎有点牵强,即使是POST请求我们也可以F12来查看headers部分数据可以看到请求的数据。由于HTTP协议是明文发送的,所以在一定程度上来说,GETPOST请求都是不安全的。

-------------本文结束您的阅读与肯定是我持续装*的最大动力-------------