GET和POST究竟有啥不同呢?
前提
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q69YRqTB-1605788309176)(img-20201119195346585.png)]
1.当输入url之后,按下回车键发生了哪些动作?
- 当浏览器输入url,先解析url地址是否合法.
- 浏览器检查是否存在缓存(浏览器缓存-系统缓存-路由器缓存),如果缓存都没有,看第三步.
- 发起Http请求前,需要进行域名解析(DNS解析),发送请求数据包.
- 发起TCP连接,经过三次握手.
- 握手成功,浏览器向服务器Http请求数据包.
- 服务器收到请求后,将数据返回给浏览器
- 浏览器接收到返回的的响应.
- 浏览器解析响应.如果响应可以存入缓存,则存入缓存.
- 浏览器发送请求获取嵌入在HTML中的资源(html、css、js、image等)
- 页面加载异步请求
- 页面的渲染—全部结束
2.GET和POST
- GET请求的参数通过URL传递的,POST请求的参数会放在请求体中
- GET请求比POST请求更不安全,因为参数直接暴露在URL中,所以GET请求不能够用来传递敏感信息
- GET请求在url中传递的参数有长度的限制的(在HTTP协议中并没有对url的长度进行限制,限制是在特定的浏览器以及服务器对它的限制,不同的浏览器限制的长度都不同。),POST没有。
- GET请求参数hi完整的保留在浏览器的历史记录中,POST请求的参数不会保留。
- GET请求进行url编码(百分号编码),POST请求支持多种编码方式.
- GET请求产生的URL地址是可以被bookmarks(存书签),POST请求不可以.
- GET请求在浏览器回退的时候是无害的,POST请求会再次提交数据.
- GET请求再浏览器中可以被主动cache,而POST请求不会,可以手动设置.
深入:
-
GET和POST本质上没有什么区别
-
GET和POST是什么
Http协议中的两种发送请求的方法,本质都是在进行TCP连接.
-
GET和POST有一个重大的区别:
-
简单来说:GET产生一个TCP数据包,POST产生TCP数据包
-
复杂的说:
- 对于GET方式的请求,浏览器会把Http header和data一起发送出去,服务器返回200 OK.
- 对于POST请求,浏览器先发送header,服务器响应100(已经收到请求的第一部分,正在等待其余部分),浏览器在发送data,服务器返回200 OK.
-
-
是不是POST请求需求两部,时间上消耗会比GET请求更多? 答:不是
- GET请求和POST请求都有自己的语义,不能随便混用.
- 在网络环境好的情况下,发送一次包的时间和发送两次包的时间差别可以无视,在网络环境差的情况下,发送两次包的TCP在校验数据完整性上,有很大的优势.
- 并不是所有浏览器都会在POST请求中发送两次包.比如:火狐