🌀 技术人生
凡事有交代,件件有着落,事事有回音
HTTP中GET和POST的区别

当你使用Java进行Web开发时,肯定写过很多个GET和POST请求

它们的区别:

GET在浏览器回退时是无害的,而POST会再次提交请求

GET的所有参数全部包装在URL中,明文显示,并且服务器的访问日志会记录,非常不安全,POST的URL中只有资源路径,不包含参数,参数封装在二进制的数据体中,服务器不会记录参数,相对安全

GET请求会被浏览器主动缓存,POST不会,除非手动设置

GET请求只能进行URL编码,POST请求支持多种编码

GET请求参数会被完整地保留在浏览器历史记录中,POST不会

GET请求在URL中传送的参数是有长度限制的,POST没有

对参数的数据类型,GET只接受ASCII字符,POST没有限制

GET参数通过URL传递,POST放在Request body中

但是GET和POST本质上没有区别

GET和POST是HTTP协议中的两种发送请求的方法

HTTP是基于TCP/IP的关于数据如何在万维网中进行通信的协议

HTTP的底层是TCP/IP,所以GET和POST的底层也是TCP/IP,也就是说,GET和POST都是TCP连接,如果要给GET加上Request body,给POST带上URL参数,技术上是完全行得通的

但是上边的GET和POST的区别是怎么回事?

这是由于HTTP的规定和浏览器/服务器的限制导致它们在应用过程中有一些不同

本质上GET和POST都是TCP连接

GET和POST有一个重大区别:

GET产生一个TCP数据包,POST产生两个TCP数据包

对于GET请求,浏览器会把HTTP header和data一并发送出去,服务器相应200

对于POST请求,浏览器先发送header,服务器相应100,浏览器再发送data,服务器相应200

也就是说,GET只需要跑一趟,而POST需要跑两趟,先去打个招呼,然后再把货送过去

但是并不是所有浏览器都会在POST请求中发送两次包,火狐就只发送一次


最后修改于 2020-03-25

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。