GET
HTTP GET 方法请求指定的资源。使用 GET 的请求应该只用于获取数据
GET请求没有主体,在正确实现的条件下GET 方式是安全、幂等、可缓存的,并且支持html表单提交
POST
HTTP POST 方法 发送数据给服务器
POST请求通常是通过HTML表达发送,并返回服务器的修改结果
POST有请求体,POST方式是不安全、不幂等、可缓存的
幂等:连续调用一次或者多次的效果相同(无副作用)
但连续调用同一个POST可能会带来额外的影响,比如多次提交订单
总结:
- GET和POST所谓区别,只是浏览器厂家根据约定,做得限制而已:
- GET是通过明文发送数据请求,而POST是通过密文(安全)
- GET传输的数据量有限,因为url的长度有限,POST则不受限
- GET请求的参数只能是ASCII码(中文需要URL编码)
- GET产生一个TCP数据包,POST产生两个TCP数据包
- 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
- 对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。
为什么?
- GET与POST都有自己的语义,不能随便混用
- 在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视
- 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次