简单描述HTTP请求中GET和POST

325 阅读2分钟

GET和POSTt都是HTTP请求,所以GET和POST都是基于TCP连接。

本质:

对于GET方式请求,浏览器会把header和data一并发送出去,然后服务器响应返回数据(200ms)

对于POST请求,浏览器会先发送header,然后服务器响应100,然后在发送data,服务器再次响应返回数据200ms

表面上看GET只发送一次包,POST发送两次包所以GET效率高一些,但是在网络环境良好的情况下,两次发包的时间差基本可以无视,而且POST的TCP在验证数据包完整性上有很大的优点

八股文答案:

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

补充: 在NetWork可以看到在发送正式的POST请求时,会先发送一个OPTIONS请求,OPTIONS请求后才会发送真正的POST请求这其实是浏览器对复杂跨域请求的一种处理方式,在真正发送请求之前,会先进行一次OPTIONS预请求,以确定服务器响应是否正确,是否能接受真正的请求,如果在options请求之后获取到的响应是拒绝性质的,例如500等http状态,那么它就会停止第二次的真正请求的访问。其实最终是因为浏览器对简单跨域请求和复杂跨域请求的处理区别