这是一个常见的面试题,涵盖从 URL 输入到页面展示的完整过程。以下是七个关键步骤的详细分解。
1. URL 解析
判断用户输入是否是合法的 URL 并识别对应的协议。如果不合法,则使用浏览器的默认搜索引擎搜索该关键词。
2. 缓存查询
查询浏览器是否缓存了对应的网页(Expires 或 Cache-Control 未过期),如果有缓存则直接使用缓存中的文件。
3. DNS 解析
现在有了网站 URL,浏览器只能通过 IP 地址找到服务器,所以需要 DNS 来获取 IP。首先查询浏览器和操作系统中的 DNS 缓存,然后检查本地 hosts 文件,如果仍然找不到,则查询 DNS 服务器。
4. TCP 连接建立
三次握手:首先客户端发送 SYN=x 数据包,服务器收到后返回 SYN=y, ACK=x+1 数据包,最后客户端发送 ACK=y+1 数据包。
5. HTTP 请求发送
通过已建立的 TCP 连接向服务器发送 HTTP 请求报文。
如果是 HTTPS,则需要 SSL/TLS 层加密。
6. HTTP 响应接收
服务器返回 HTTP 响应报文。
如果是 HTTPS,响应需要先用私钥解密。
7. 浏览器解析渲染
解析 HTML、CSS、JavaScript,构建 CSSOM 和 DOM 树,并进行渲染。
如果有其他资源(如图片),则按相同流程请求它们。