原文地址:99%的人都理解错了HTTP中GET与POST的区别
GET和POST请求在本质上都是TCP链接,并没有什么区别
Get 请求仅受限于浏览器对 URL 的长度的限制,过长可能会被截断
但是 HTTP 的规定和 浏览器 / 服务器 的限制,导致他们在应用过程中体现了一些不同
大多数的浏览器都会限制url长度在2k个字节,大多数服务器最多处理64k大小的url,超出部分恕不处理
如果你用 GET 服务,在 request body 中偷偷藏了数据,不同服务器的处理方式也是不同的,有的服务器会帮你处理,读出数据;有的服务器直接忽略,所以,虽然 GET 请求可以带 request body,也不能保证一定被接收到
两者最大的区别:
GET请求产生一个 TCP 数据包,POST 产生两个 TCP 数据包
- 对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去, 服务器响应200(返回数据)
- 对于 POST 方式则需要两步,浏览器先发送了 header ,服务器响应 100 continue,浏览器再发送data,服务器响应200(返回数据)
使用 GET 替代 POST 来优化网站性能 ?
不,GET 与 POST 都有自己的语义,不能随便混用
据研究,在网络环境好的情况下,发两次包和发一次包的时间差基本可以无视;而在网络环境差的情况下,两次包的 TCP 在验证数据包的完整性上有非常大的优点
再一个就是,并不是所有的浏览器都会在 POST 中发送两次包,Firefox 就只发送了一次