Skip to content

1. 基本用途

  • GET 请求主要用于从服务器获取数据。它常用于读取数据而不会对服务器上的数据进行修改。例如,在访问一个网页时,我们通常会使用 GET 请求来获取网页的内容。
  • POST 请求主要用于向服务器发送数据以进行处理。它常用于提交数据,例如表单提交,或者对服务器上的数据进行创建和更新操作。

2. 参数传递方式

  • GET 请求的参数是通过 URL 进行传递的。通常我们会在 URL 后面使用 ?& 来拼接参数,例如 http://example.com/api?param1=value1&param2=value2。由于参数包含在 URL 中,所以 GET 请求的 URL 长度是有限制的,大约是 2048 个字符左右。
  • POST 请求的参数是包含在请求体(body)中的,而不是通过 URL 传递。这使得 POST 请求能够传递大量的数据,而且数据类型更加灵活,比如可以发送 JSON、XML 或者表单数据。

3. 缓存

  • GET 请求是可以被缓存的,这意味着在相同请求下,浏览器可能会返回缓存的响应而不是重新发送请求。这样可以提高性能,减少服务器负载。
  • POST 请求通常不会被缓存,因为它用于提交数据,每次请求都应该被服务器处理。

4. 安全性

  • GET 请求在安全性方面稍弱,因为参数包含在 URL 中,容易被第三方看到,尤其是在浏览器历史记录和日志文件中也会显示。因此,不适合传递敏感信息。
  • POST 请求则更加安全,因为参数包含在请求体中,不会在 URL 中显示。不过,需要注意的是,POST 请求也并不是绝对安全的,在传递敏感信息时,还是需要结合 HTTPS 协议来确保安全性。
区别GETPOST
传输长度长度限制(受限于url长度),一般2KBpost无限制
传输方式地址栏传输报文传输
用途查询增删改数据
数据包数量一个TCP数据包 (http header 和 data一并发送出去)两个TCP数据包 (浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok 返回数据,所以时间上消耗的要多一点
安全性 (此处的安全性与安全与幂等中的安全不同)不安全 (参数直接暴露在URL上,所以不能用来传递敏感信息)相对于 get 安全
回退在浏览器回退时是无害的POST会再次提交请求
缓存会被浏览器主动缓存不会被主动缓存
历史记录会被完整保留在浏览器历史记录里不会保留
参数类型只接受ASCII字符无限制
编码只能URL编码POST支持多种编码方式