Skip to content

Latest commit

 

History

History
47 lines (35 loc) · 3.53 KB

HTTP_GET_POST.md

File metadata and controls

47 lines (35 loc) · 3.53 KB

HTTP 中 GET/POST 的区别

在客户端和服务器之间进行请求-响应时,两种最常被用到的方法是:GETPOST

  • GET - 从指定的资源请求数据。
  • POST - 向指定的资源提交要被处理的数据

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。POSTGET大致区别如下表所示:

# GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码
历史 参数保留在浏览器历史中 参数不会保存在浏览器历史中
对数据长度的限制 当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) 无限制
对数据类型的限制 只允许 ASCII 字符 没有限制。也允许二进制数据
安全性 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分 在发送密码或其他敏感信息时绝不要使用 GET ! POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中
可见性 数据在 URL 中对所有人都是可见的 数据不会显示在 URL 中

重点区别

  • http 协议并未规定 get 和 post 的长度限制
  • get 的最大长度限制是因为浏览器和 web 服务器限制了 URL 的长度
  • 对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 POST,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)

get请求过程

  1. 浏览器请求 tcp 连接(第一次握手)
  2. 服务器答应进行 tcp 连接(第二次握手)
  3. 浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
  4. 服务器返回200 OK响应

post请求过程

  1. 浏览器请求 tcp 连接(第一次握手)
  2. 服务器答应进行 tcp 连接(第二次握手)
  3. 浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
  4. 服务器返回100 Continue响应
  5. 浏览器发送数据
  6. 服务器返回200 OK响应

为什么 get 请求比 post 请求快

  1. get请求比post请求少一步
  2. get请求可以缓存