基本认识
- http协议底层是TCP/IP协议,也就是说,get/post都是TCP链接
get和post的本质区别
- get在浏览器回退时时无害的,而post会再次提交请求
- get会被浏览器主动cache,而post不会,除非手动设置
- get只能进行url编码,而post能支持多种
- get参数有长度限制,而post没有。(大多数浏览器限制url长度为2K,大多数服务器最多处理64K大小)
- post更安全,因为post参数在body中,get直接暴露在url中
- get产生一个TCP数据包,post会产生两个数据包;
get: 浏览器会把header和data一并发出去,服务器返回数据;
post: 先发送header, 服务器响应100 continue,浏览器再发送data,服务器响应200 返回数据。
在网络好的情况下,一次和两次发包的时间差几乎可以忽略;在网络差的情况下,两次包的TCP在验证数据包的完整性上有非常大的优点。
不是所有的浏览器post都是发送两次请求的,比如Firefox就只发送一次