POST 和 GET 的区别

转自

前言

无论是 POST 还是 GET 请求, 都是基于 HTTP 的, 而 HTTP 协议是 TCP/IP 协议族的应用层协议

请求方法

  • GET: 获取资源, 用来请求访问已被 URI (同意资源标识符, 和 URL 是包含和被包含关系) 识别的资源
  • POST: 用来传输实体的主体, GET 也可以实现, 但是一般不使用
  • **PUT: 传输文件, ** 但是鉴于 PUT 方法本身不带验证机制, 任何人都可以上传文件, 存在安全性问题, 因此网站一般都不使用该方法
  • HEAD: 获得报文首部, 和 GET 请求一样, 只是不返回报文主体部分.
  • DELETE: 删除文件, 同样不带验证机制, 存在安全性问题
  • OPTIONS: 询问指定的请求 URI 支持哪些方法
  • CONNECT: 要求在与代理服务器通信时建立隧道, 实现隧道协议进行 TCP 通信

GET 和 POST

  • 本质上都 TCP 连接, 并无差别
  • 由于 **HTTP 的规定和浏览器/服务器的限制, ** 导致其在实际应用过程中会体现出一些区别

区别

  • GET 在浏览器回退时是无害的, 而 POST 会再次提交请求
  • GET 产生的 URL 地址可以被 Bookmark, 而 POST 不可以
  • GET 请求会被浏览器主动 cache, 而 POST 不会, 除非手动设置
  • GET 请求只能进行 URL 编码, 而 POST 支持多种编码方式.
  • GET 请求的参数会被完整保留在浏览器历史记录里, 而 POST 中的参数不会被保留
  • GET 请求在 URL 中传送的参数是有长度限制的, 而 POST 没有
  • 对参数的数据类型, GET 只接受 ASCII 字符, 而 POST 没有限制
  • GET 比 POST 更不安全, 因为参数直接暴露在 URL 上, 所以不能用来传递敏感信息
  • GET 参数通过 URL 传递, POST 则放在 Request body 中

参数长度

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

HTTP 协议没有 Body 和 URL 的长度限制, POST 对请求数据没有限制

安全

POST 比 GET 安全, 因为数据在地址栏上不可见, 然而, 从传输的角度来说, 其都是不安全的, 因为 HTTP 在网络上都是明文传输, 只要在网络节点上抓包, 就可以完整地获取数据报文.

只有使用 HTTPS 才能加密安全

POST 与 GET 小结

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

  • **请求参数: ** GET 请求参数是通过 URL 传递的, 多个参数以 & 连接, POST 请求放在 request body 中

  • 请求缓存: GET 会请求缓存, 而 POST 请求不会, 除非手动设置

  • 收藏为书签: GET 请求支持, POST 请求不支持

  • 安全性: POST 比 GET 安全, GET 请求在浏览器回退时是无害的, 而 POST 会再次请求

  • 历史记录: GET 请求参数会被完整保留在浏览器历史记录里, 而 POST 中的参数不会被保留

  • 编码方式: GET 请求只能进行 URL 编码, 而 POST 支持多种编码方式

  • 对参数的数据类型: GET 只接受 ASCII 字符, 而 POST 没有限制