你在浏览器中输出了一个地址,回车后,一直到显示页面,中间经历了哪些过程 ?
1. 用户输入 URL 并按下回车
- 用户在浏览器的地址栏中输入一个 URL(例如
http://example.com
)并按下回车键。
2. DNS 解析
- 浏览器检查本地缓存中是否有该域名对应的 IP 地址。
- 如果本地缓存没有,浏览器会向本地 DNS 服务器(通常是由 ISP 提供)发送 DNS 查询请求。
- 本地 DNS 服务器查找该域名的 IP 地址,如果找不到,会递归查询上级 DNS 服务器,直到找到对应的 IP 地址。
- 找到 IP 地址后,DNS 服务器将其返回给浏览器。
3. 建立 TCP 连接
- 浏览器使用之前获得的 IP 地址,通过 TCP/IP 协议与目标服务器建立连接。
- 浏览器向服务器的默认端口(通常是 80 或 443)发送 TCP SYN 请求,开始三次握手过程:
- 浏览器发送 SYN 包。
- 服务器收到 SYN 包后,回复 SYN-ACK 包。
- 浏览器收到 SYN-ACK 包后,回复 ACK 包,三次握手完成,TCP 连接建立。
4. 发送 HTTP 请求
- TCP 连接建立后,浏览器向服务器发送 HTTP 请求:
- 请求行(Request Line):包含请求方法(GET、POST 等)、请求 URL 和 HTTP 版本。
- 请求头(Headers):包含浏览器的各种信息,如 User-Agent、Accept、Host 等。
- 请求体(Body):在 GET 请求中通常为空,在 POST 请求中包含提交的数据。
5. 服务器处理请求
- 服务器收到请求后,根据请求的 URL 和其他信息,进行处理。
- 服务器可能需要:
- 读取静态资源(如 HTML、CSS、JavaScript 文件等)。
- 调用后台程序(如 PHP、Python、Java 等)生成动态内容。
- 查询数据库以获取数据。
- 处理完成后,服务器将生成 HTTP 响应。
6. 服务器发送 HTTP 响应
- HTTP 响应包含以下部分:
- 状态行(Status Line):包含 HTTP 版本、状态码(如 200 OK、404 Not Found 等)。
- 响应头(Headers):包含服务器信息、内容类型、内容长度等。
- 响应体(Body):包含请求的实际内容(如 HTML 页面、图像等)。
7. 浏览器接收响应并渲染页面
- 浏览器接收到服务器的响应后,开始解析 HTML 内容。
- 浏览器根据 HTML 内容,逐步下载并解析嵌入的资源(如 CSS、JavaScript、图像等)。
- 浏览器构建 DOM 树(Document Object Model)和 CSSOM 树(CSS Object Model),结合成渲染树(Render Tree)。
- 浏览器根据渲染树进行布局计算,将元素放置在正确的位置。
- 浏览器绘制页面,将内容显示在屏幕上。
8. 执行 JavaScript 和动态更新页面
- 浏览器继续解析并执行嵌入的或外部引用的 JavaScript 代码。
- JavaScript 代码可能进行 DOM 操作或通过 AJAX 请求获取更多数据,动态更新页面内容。
总结
整个过程涉及 DNS 解析、TCP 连接、HTTP 请求和响应、页面解析和渲染、JavaScript 执行等多个步骤。每个步骤都可能涉及多个底层协议和技术细节,共同确保用户最终能够看到完整的网页。