总体流程:
1. 用户输入URL并按下回车
当用户在浏览器的地址栏中输入一个 URL 并按下回车,浏览器开始解析用户输入并判断这是一个合法的 URL。
2. DNS 解析
- 缓存查找:浏览器首先查看本地 DNS 缓存中是否有对应的 IP,如果有则直接使用。
- 主机文件查找:如果本地缓存没有找到,浏览器则会查询操作系统的
hosts
文件。 - 系统缓存查找:接着浏览器会查询系统缓存中的 DNS 记录。
- 路由器缓存查找:系统缓存没有找到时,会向路由器请求,查看路由器缓存。
- ISP DNS 服务器查找:如果路由器缓存也没有找到,最终请求会被发送到 ISP(互联网服务提供商)的 DNS 服务器。
- 递归查询:如果 ISP DNS 服务器也没有找到对应记录,则会进行递归查询,即向根 DNS 服务器、顶级域名服务器等逐步查询。
3. 建立 TCP 连接
获得 IP 地址后,基于三次握手(TCP 三次握手过程),浏览器与服务器建立 TCP 连接,以确保通信的可靠性。
4. 发送 HTTP 请求
TCP 连接建立成功后,浏览器会发送一个 HTTP 请求给服务器,这个请求包含了 URL、请求方法(GET、POST 等)、请求头等信息。
5.1 服务器处理请求
服务器接收到 HTTP 请求后,会根据请求路径和参数处理请求,并生成 HTTP 响应。这个过程可能涉及:
- 查询数据库
- 调用内部服务或第三方 API
- 读取文件系统的静态资源(如 HTML 文件、图片、CSS 文件等)
5.2. 服务器返回 HTTP 响应
服务器将处理结果封装成 HTTP 响应,返回给浏览器。HTTP 响应包括状态码、响应头和响应体。
6. 浏览器开始处理 HTTP 响应
浏览器接收到 HTTP 响应后,将响应内容交给渲染引擎进行处理: