Skip to main content

GET和POST的区别

· 4 min read
Ma Chu

get请求和post请求本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

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响应。

区别

  • 安全
    • post请求更安全,不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中。
    • get请求的是静态资源,则会缓存,如果是数据,则不会缓存。
  • 数据包
    • post请求发送的数据更大。
    • get请求有url长度限制,http协议本身不限制,请求长度限制是由浏览器和web服务器决定和设置。
  • post请求能发送更多的数据类型(get请求只能发送ASCII字符)。
  • 传参方式不同(get请求参数通过url传递,post请求放在request body中传递)。
  • get请求的是静态资源,则会缓存,如果是数据,则不会缓存。
  • get请求产生一个TCP数据包;post请求产生两个TCP数据包(get请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据;post请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 返回数据)。

在发送 POST 的时候都没有带 Expect 头,server 也自然不会发 100 continue。