区别
- 请求报文不一样:get请求请求体中没有请求数据,post请求的请求体中有请求数据。
- 传输方式:get参数通过url传输,post参数通过请求体传输。
- get相对post不安全,因为参数都是直接暴露在url上,所以不能用来传递敏感数据。
- 传送长度:get参数有长度限制2kb(受限于url长度),post无限制。
- 产生tcp数据包数量不一样(重要区别):get产生一个数据包,post产生两个数据包。
原因:对于get请求,浏览器会将http header和data一起发送出去,服务器响应200 ok(返回数据)。对于post请求,浏览器会先发送http header给服务器,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 - 语义上的区别:get一般是查询数据,post一般是提交数据。
- get请求可以保存到浏览器历史记录中,post不行。
什么是预请求?
- 对那些可能对服务器数据产生变化的请求方法(如post、delete等),浏览器必须首先使用options方法发出一个预检请求,来获知服务端是否允许该跨域请求。服务器确认以后才能发起实际的http请求,否则停止第二次正式请求。