一、1次完整的HTTP的服务过程
当我们在web浏览器的地址栏中输入URL地址发生了什么?
- 对网址进行DNS域名解析,得到对应的IP地址
- 根据IP地址,找到对应的服务器,发起TCP的三次握手
- 建立TCP连接后发起HTTP请求
- 服务器响应HTTP请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(js,css,图片,先得到代码再找资源
- 浏览器对页面进行渲染后呈现给用户
- 服务器关闭连接
== 注==
-
DNS怎么找到域名?
DNS域名解析采用“递归查询”方式,先查DNS缓存—>跟域名服务器—>根域名,这样队规查找之后,找到了之后借web浏览器。
-
为什么http协议要基于TCP来实现?
TCP是一个端到端的可靠的面向连接的协议,HTTP基于传输层TCP协议不用担心数据传输的各种问题(发生错误时会重传)
-
浏览器是如何对页面进行渲染的
解析html文件构成DOM树 解析css文件构成css渲染树 边解析边渲染 JS单线程运行,可能修改DOM结构,所以js会阻塞后续资源下载
HTTP缓存控制(提高并发效率)
http缓存作用范围
浏览器缓存,http缓存能够提高服务器并发性能,不需要重复请求从浏览器直接拿资源。
** http缓存分类**
强缓存和协商缓存
http缓存实现技术
强缓存:Expires,Cache-Control
协商缓存:last/modify(有时间精度问题,精确到秒),IEtag/If-None-Match
浏览器缓存分类(强缓存和协商缓存)
- 强缓存:不用发服务器就可以拿到缓存,利用Expires绝对时间(缓存过期时间)或者Cache-Control(相对时间)两个字段来控制,表示资源的缓存时间
-
- 协商缓存:浏览器会发请求到服务器(http返回码:304) 用last/Modify(最后改变时间,第一次请求服务器发送)和If-Modify-Since(第二次浏览器发请求)ETag/If-None-Match——返回一个校验码,如果两者相同,状态码返回304,协商:缓存文件是否更新,没有更新使用缓存,文件更新,服务器发送新的给浏览器 状态码:200
1.浏览器先根据资源的http头信息来判断是否命中强缓存,如果命中则直接加在缓存中的资源,并不会将请求发送到服务器(强缓存)
2.如果没有命中强缓存,浏览器将资源加载请求发送到服务器,服务器哦安短浏览器本身的缓存是否失效,如果可以使用,则服务器并不会返回资源信息,浏览器继续从缓存加载资源(协商缓存)
3.如果未命中协商缓存,则服务器会将完整的资源返回给浏览器,浏览器加载新资源,并更新缓存。 (新的请求)