盒子

GET 和 POST 的差异

原文:都 9102 年了,还问 GET 和 POST 的区别

  1. GET 和 POST 只是 HTTP 协议中两种请求方式,而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输层上,没有任何区别。

    1. 当 GET 和 POST 「不携带参数」时,最大的区别是第一行方法名不同:
      请求报文第一行

      GET /uri HTTP/1.1 \r\n
      POST /uri HTTP/1.1 \r\n
    2. 当 GET 和 POST 「携带参数」时,安装约定 GET 方法的参数应该放在 URL 里,POST 方法的参数应该放在 body 中

      GET 简约版报文

      GET /index.php?name=qiming.c&age=22 HTTP/1.1
      Host: localhost

      POST 简约版报文

      POST /index.php HTTP/1.1
      Host: localhost
      Content-Type: application/x-www-form-urlencoded
      name=qiming.c&age=22
  2. 「浏览器」的 URL 有长度限制是出于「安全」和「性能」考虑,在解析长 URL 时需防止恶意构造长 URL 来进行攻击,和 HTTP 协议本身没有关系。