2022-06-12 14:05:20
从浏览器地址栏输入 URL 到显示网页的过程如下:
DNS解析
当用户在浏览器地址栏输入一个URL(如
DNS解析过程涉及多级缓存,包括浏览器缓存、系统缓存、路由器缓存、ISP(互联网服务提供商)服务器缓存、根域名服务器缓存、顶级域名服务器缓存以及主域名服务器缓存。这些缓存的存在可以加快DNS解析的速度。
一旦找到对应的IP地址,浏览器就可以建立到该IP地址所在服务器的TCP连接。
TCP连接
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在建立TCP连接之前,浏览器和服务器之间需要进行三次握手,以确保双方都能正常通信。
第一次握手:由浏览器发起,向服务器发送一个SYN(同步序列编号)报文,表示浏览器想要建立连接。
第二次握手:服务器收到SYN报文后,会回复一个SYN-ACK(同步-确认)报文,表示服务器同意建立连接,并确认收到了浏览器的SYN报文。
第三次握手:浏览器收到服务器的SYN-ACK报文后,会再发送一个ACK(确认)报文,表示浏览器已经收到了服务器的SYN-ACK报文,至此TCP连接建立完成。
发送HTTP请求
建立TCP连接后,浏览器会向服务器发送一个HTTP请求报文。这个报文包含了请求的方法(如GET、POST等)、请求的URL、请求头(如User-Agent、Accept等)以及请求体(对于POST请求而言)。
服务器处理请求并返回HTTP报文
服务器收到HTTP请求报文后,会根据请求的内容进行相应的处理。这可能包括查询数据库、执行服务器端脚本、生成HTML页面等。
处理完成后,服务器会返回一个HTTP响应报文给浏览器。这个报文包含了状态码(如200 OK、404 Not Found等)、响应头(如Content-Type、Content-Length等)以及响应体(如HTML页面、图片等)。
浏览器解析渲染页面
浏览器收到HTTP响应报文后,会开始解析和渲染页面。这个过程包括以下几个步骤:
解析HTML:浏览器会调用HTML解析器将HTML标记解析成Token,并构建成DOM(文档对象模型)树。
解析CSS:遇见style/link标记时,浏览器会调用CSS解析器解析CSS样式,并构建CSSOM(CSS对象模型)树。
解析JavaScript:遇见script标记时,浏览器会调用JavaScript解析器处理JavaScript代码。JavaScript代码可能会修改DOM树或CSSOM树。
布局计算:根据DOM树和CSSOM树,浏览器会计算每个节点的几何信息(如位置、大小等),生成渲染树。
绘制渲染:最后,浏览器会将渲染树中的各个节点绘制到屏幕上,完成页面的渲染。
需要注意的是,这些步骤不一定按照顺序执行。如果DOM树或CSSOM树被修改了(如JavaScript代码的执行),可能会触发重新布局和渲染。
连接结束
当页面加载完成后,浏览器和服务器之间的TCP连接需要被关闭。这个过程涉及四次挥手:
第一次挥手:浏览器发起,发送一个FIN(结束)报文给服务器,表示浏览器已经发送完所有请求报文,准备关闭连接。
第二次挥手:服务器收到FIN报文后,回复一个ACK报文给浏览器,表示服务器已经收到了浏览器的FIN报文。
第三次挥手:服务器发起,发送一个FIN报文给浏览器,表示服务器已经发送完所有响应报文,准备关闭连接。
第四次挥手:浏览器收到服务器的FIN报文后,回复一个ACK报文给服务器,表示浏览器已经收到了服务器的FIN报文。至此TCP连接关闭完成。
综上所述,从浏览器地址栏输入URL到显示网页的过程涉及DNS解析、TCP连接、发送HTTP请求、服务器处理请求并返回HTTP报文、浏览器解析渲染页面以及连接结束等多个步骤。这些步骤共同协作,使得用户能够顺利访问到所需的网页内容。