- 安全性:post会比get更加安全,因为get参数直接暴露在URL上,所以不能用来传递敏感信息。
- 传参:post通过request body传参;get通过url传参
- 参数限制:get只接受ASCII字符,post可以接受任意字符
- 记录:get参数会完整保留在浏览器历史记录里,post的参数不会
- 长度限制:get参数长度会受不同浏览器的url长度限制(大多数)浏览器通常都会限制url长度在2K个字节;post没有限制
- post会产生两个TCP数据包,而get只产生一个TCP数据包(例外:Firefox当中post也是一个TCP数据包)
- 缓存:get请求会被浏览器主动cache,而post不会,除非手动设置
- get请求只能进行url编码,而post支持多种编码方式
其实,get和post本质上是一样的,都是TCP链接,只是http给规定了不同的TCP链接规矩。但是规矩是规矩,也不一定非要遵守。
就比如,我就非得把post的参数写在url上,有点der,但也不是不行;我非得把get的参数写在request body里面,也就变得安全了,也不是不可以。
但是呢,不是所有浏览器都认get请求的request body里面的数据,也就是说,get虽然能在request body里面存放数据,但是浏览器不一定能够接收到。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
虽然在网络好的时候,传一次或者两次TCP包并无太大区别,但是在网络差的时候,两次包的TCP在验证数据包完整性上,有非常大的优点。
这就否了一些人认为GET仅需要传一个TCP数据包,比POST效率高,要把POST换为GET的想法。
所以说POST与GET还是要按http大BOSS的规矩来的,不能混用哒~