-
在浏览器地址栏输⼊URL
-
浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤
- 如果资源未缓存,发起新请求
- 如果已缓存,检验是否⾜够新鲜,⾜够新鲜直接提供给客户端,否则与服务器进⾏验
证。 - 检验新鲜通常有两个HTTP头进⾏控制 Expires 和 Cache-Control :
HTTP1.0提供Expires,值为⼀个绝对时间表示缓存新鲜⽇期
HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最⼤新鲜时间
-
浏览器解析URL获取协议,主机,端⼝,path
-
浏览器组装⼀个HTTP(GET)请求报⽂
-
浏览器获取主机ip地址,过程如下:
- 浏览器缓存
- 本机缓存
- hosts⽂件
- 路由器缓存
- ISP DNS缓存
- DNS递归查询(可能存在负载均衡导致每次IP不⼀样)
-
打开⼀个socket与⽬标IP地址,端⼝建⽴TCP链接,三次握⼿
-
TCP链接建⽴后发送HTTP请求
-
服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使⽤HTTP Host头部判断请
求的服务程序 -
服务器检查HTTP请求头是否包含缓存验证信息如果验证缓存新鲜,返回304等对应状态码
-
处理程序读取完整请求并准备HTTP响应,可能需要查询数据库等操作
-
服务器将响应报⽂通过TCP连接发送回浏览器
-
浏览器接收HTTP响应,然后根据情况选择关闭TCP连接或者保留重⽤,关闭TCP连接的四
次握⼿ -
浏览器检查响应状态吗:是否为1XX,3XX, 4XX, 5XX,这些情况处理与2XX不同
-
如果资源可缓存,进⾏缓存
-
对响应进⾏解码(例如gzip压缩)
-
根据资源类型决定如何处理(假设资源为HTML⽂档)
-
解析HTML⽂档,构件DOM树,下载资源,构造CSSOM树,执⾏js脚本,这些操作没有严
格的先后顺序 -
构建DOM树
-
解析过程中遇到图⽚、样式表、js⽂件,启动下载
-
构建CSSOM树
-
根据DOM树和CSSOM树构建渲染树
-
js解析
-
显示⻚⾯(HTML解析过程中会逐步显示⻚⾯)