一次 HTTP 的请求过程
一次完整的 HTTP 请求过程中,会涉及到多个步骤,从用户发起请求到接收响应,通常包括以下过程:
1. DNS 解析
- 当用户在浏览器中输入一个 URL 或点击一个链接时,首先需要将域名解析为 IP 地址。浏览器会先查询本地缓存,如果没有找到,就会向 DNS 服务器发起查询请求,获取目标服务器的 IP 地址。
2. 建立 TCP 连接
- 通过 DNS 解析到的 IP 地址,浏览器开始与目标服务器建立 TCP 连接。这个过程涉及 TCP 三次握手,以确保客户端和服务器之间的连接已经准备好进行数据传输。
3. 发送 HTTP 请求
- 一旦 TCP 连接建立,浏览器会构建一个 HTTP 请求报文,包含请求方法(如 GET、POST)、请求 URL、HTTP 版本、请求头部信息(如 User-Agent、Cookie 等)以及请求体(通常用于 POST 请求)。
- 浏览器将这个请求通过 TCP 连接发送到目标服务器。
4. 服务器处理请求
- 服务器接收到 HTTP 请求后,首先解析请求报文,查看请求的资源和请求方法。
- 服务器根据请求的 URL 和请求方法,调用相应的程序或服务来处理请求。这可能涉及查询数据库、调用后台服务、读取文件等操作。
5. 生成 HTTP 响应
- 服务器处理完成后,生成一个 HTTP 响应报文,包含响应状态码(如 200 OK、404 Not Found)、响应头部信息(如 Content-Type、Content-Length)、以及响应体(通常是请求的网页、数据等)。
- 服务器将这个响应报文通过 TCP 连接返回给客户端。
6. 浏览器接收响应
- 浏览器接收到服务器的响应后,首先解析响应状态码,以确定请求是否成功。
- 然后浏览器会根据响应头部的信息来处理响应体,例如解码压缩内容、处理 cookies 等。
7. 渲染页面
- 如果响应体是 HTML 页面,浏览器会解析 HTML 内容,并发起额外的 HTTP 请求来获取页面中的资源(如图片、CSS 文件、JavaScript 文件等)。
- 这些资源获取到后,浏览器会按照 HTML 文档的结构进行页面渲染,生成最终的用户界面。
8. 关闭连接
- 在 HTTP/1.0 中,通常在请求完成后立即关闭 TCP 连接。
- 在 HTTP/1.1 中,引入了 持久连接(Keep-Alive)机制,允许同一连接复用多个请求,以减少开销。
9. 后续操作
- 用户可能会在页面上进行进一步操作,如点击按钮、填写表单等,这些操作会触发新的 HTTP 请求,重复以上过程。
总结
在一次 HTTP 请求过程中,从域名解析、建立连接、发送请求、服务器处理、接收响应到最终渲染页面,每一步都在后台进行一系列复杂的操作,确保最终用户能够看到并交互所请求的内容。