HTTP的GET跟POST的区别

基本区别

  • GET 比 POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
  • GET 参数通过URL传递,而POST则放在request body中(这就解释了上一条规则
  • GET在浏览器回退时是无害的,而POST会再次提交请求
  • GET请求会被浏览器主动缓存(cache),而POST不会,除非手动设置
  • GET 请求只会进行URL编码,而POST支持多种编码方式
  • GET请求在URL中有参数限制(一般是2K),而POST没有限制

更加深入一点:

HTTP底层是TCP/IP实现的,所以GET和POST底层都是用TCP/IP,所以理论上我们可以在GET带上request body,也可以让POST带上URL参数,只是这样做违反了HTTP的规定而已

还有一个重大的区别:

GET会产生一个TCP数据包,而POST产生两个TCP数据包
GET请求会把header头部和data数据一起发送过去,服务器返回200
POST请求,浏览器会先发送header,服务器返回100 continue,浏览器再发送data,服务器返回200
即使是这样,发送一次包的时间和发送两次包的时间其实是差不多的,所以POST请求也不必GET请求差