此页内容

约 684 字大约 2 分钟

2022-04-20

提问

  1. 在浏览器的地址栏输入一个 网址URL,并按下回车后,发生了什么?
  1. 首先对 URL地址进行解析,分析所需要使用的传输协议和请求的资源路径。如果输入的URL不合法,则认为不是一个有效的URL, 按下enter时会将输入的内容传给搜索引擎;如果输入的URL合法,浏览器检查URL是否出现了非法字符, 如果存在则对非法字符进行转译,然后进入到下个过程。

  2. 浏览器判断当前URL所请求的资源是否在缓存里,如果有缓存且缓存没有失效,则直接返回缓存的资源,否则向服务器发起新的请求。

  3. 向服务器发起请求前,需要获取当前域名的IP地址,首先先判断本地DNS缓存是否有该域名的DNS缓存,如果有则使用,如果没有, 则向DNS服务器发起请求,获取域名的IP地址,然后把IP地址返回给浏览器。

  4. 浏览器获得IP地址后,通过TCP协议进行建立连接的三次握手,成功后,浏览器与服务端建立连接。 如果是HTTPS协议,还需要进行TSL四次握手,建立安全连接。

  5. 浏览器发起的URL请求成功抵达服务器,服务器返回一个html文件作为响应。浏览器接收到html文件后,开始对html文件进行解析。

  6. 浏览器首先根据html文件进行解析,构建DOM树,遇到 link标签发现CSS资源请求时,停止html解析, 请求CSS资源并解析为 CSSOM树后,继续解析html文件。

  7. 如果遇到 script 标签,则判断是否有声明 defer或async属性,如果都没有,则script的加载和执行都会阻塞html文档的解析, 如果声明了defer属性,则并行加载javascript资源后等待html解析完成再执行; 如果声明了async属性,则并行加载javascript资源,加载完成后立即执行并阻塞html文档解析。

  8. 当 DOM树和CSSOM树都解析建立完成,浏览器根据它们构建渲染树,渲染树构建完成后,根据渲染树进行布局。

  9. 浏览器布局完成后,使用浏览器的UI接口对网页进行绘制,此时整个页面就显示出来了。

  10. 最后退出网页后, TCP开始断开连接的四次挥手过程。