高级前端http【Q580】http 方法 get 与 post 有何区别

http 方法 get 与 post 有何区别

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 596

Author 回答者: haotie1990

  • 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产生一个TCP数据包;POST产生两个TCP数据包

Author 回答者: shfshanyue

TODO

Author 回答者: shfshanyue

@haotie1990 GET产生一个TCP数据包;POST产生两个TCP数据包。这句话不准确吧

Author 回答者: haotie1990

@haotie1990 GET产生一个TCP数据包;POST产生两个TCP数据包。这句话不准确吧

POST请求,header和body时分两次发送的

https://blog.josephscott.org/2009/08/27/xmlhttprequest-xhr-uses-multiple-packets-for-http-post/

Author 回答者: kurodasense

  • 幂等性不同。幂等性是针对于理想情况下的设计结果。GET 对访问的数据没有副作用,具有幂等性。而当POST 用于更新操作时往往是有副作用的,不幂等。

    • 因为幂等性的差别:
      • GET 产生的 URL 地址可以保存为书签,而 POST 不可以。
      • GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置;
      • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
      • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • 携带数据的方式不同

    • GET 一般将数据以参数的形式放到 URL 中,虽然 HTTP 标准并未对 URL 长度做限制,但是浏览器在实现时,一般会对 URL 的长度做限制,所以携带的数据有限;
    • POST 将数据放到 Body 中,无长度限制。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

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

  • 安全性不同。GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。

  • GET产生一个TCP数据包;POST有时产生两个TCP数据包,有浏览器会将post请求的header和data分为两次发送。

Author 回答者: Echo-MakeGreatEffort

一、用途 get: 用于请求从服务器获取资源或数据 post: 用于向服务器提交数据,通常是表单数据 二、幂等性 get: 幂等,多次请求相同的资源不会导致服务器状态的改变 post: 非幂等,多次请求可能导致不同的服务器状态 三、传输方式 get: 通过url传输,数据量大小有限制 post: 通过请求报文主体传输,可传输较大数据量 四、安全性 get:数据通过 URL 传递,容易被缓存、记录、拦截或篡改,不适合传输敏感数据 post: 数据通过请求主体传递,相对不容易被缓存或直接记录 五、可见性 get: 请求的所有数据都显示在 URL 中,适合用于书签、URL 共享等场景 post: 数据隐藏在请求主体中,用户无法直接看到或修改,不适合用于书签或直接分享 六、缓存 get: 通常会被浏览器缓存 post: 默认情况下不会被浏览器缓存