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就只发送一次