简述一次完整的 HTTP 请求所经历的步骤?
1 个回答
先解决心情在解决事情。追日#### 1. DNS 解析 当你在浏览器中输入一个网址(如 `www.example.com`)并按下回车键时,首先发生的是 DNS 解析,即将域名转换成对应的 IP 地址。这个过程通常包括以下步骤: 1. **浏览器缓存**:浏览器首先会检查其自身的 DNS 缓存,看看是否有该域名的缓存记录。 2. **操作系统缓存**:如果浏览器缓存中没有找到对应记录,它会查询操作系统的 DNS 缓存。 3. **路由器缓存**:如果操作系统缓存中也没有记录,请求会被发送到路由器,查看路由器的缓存。 4. **ISP DNS 服务器**:如果路由器没有找到对应记录,请求会被发送到互联网服务提供商(ISP)的 DNS 服务器。 5. **递归查询**:如果 ISP 的 DNS 服务器也没有记录,它会进行递归查询,依次向根 DNS 服务器、顶级域 DNS 服务器和权威 DNS 服务器查询,直到找到目标 IP 地址。 #### 2. 建立 TCP 连接 在获得 IP 地址后,浏览器会与服务器建立 TCP 连接,具体步骤如下: 1. **TCP 三次握手**: - **第一次握手**:客户端向服务器发送一个 SYN(同步序列编号)包,表示客户端请求建立连接。 - **第二次握手**:服务器收到 SYN 包后,向客户端返回一个 SYN-ACK(同步-确认)包,表示同意建立连接。 - **第三次握手**:客户端收到 SYN-ACK 包后,再次向服务器发送一个 ACK(确认)包,表示连接建立。 #### 3. 发送 HTTP 请求 TCP 连接建立后,客户端会向服务器发送 HTTP 请求,通常是 GET 或 POST 请求。请求的内容包括: - 请求行(Request Line):包含请求方法(如 GET、POST)、请求 URL 和 HTTP 版本。 - 请求头(Request Headers):包含各种请求头信息,如 Host、User-Agent、Accept 等。 - 请求体(Request Body):在 POST 请求中,包含提交的数据。 #### 4. 服务器处理请求并发送响应 服务器接收到请求后,会进行处理,并返回 HTTP 响应,具体步骤如下: 1. **服务器接收请求**:服务器接收到客户端发送的请求,并解析请求内容。 2. **处理请求**:服务器根据请求的 URL 和请求参数,执行相应的处理逻辑(如查询数据库、调用后台服务等)。 3. **生成响应**:服务器生成 HTTP 响应,响应内容包括: - 响应行(Status Line):包含 HTTP 版本、状态码(如 200、404)和状态描述。 - 响应头(Response Headers):包含各种响应头信息,如 Content-Type、Content-Length、Set-Cookie 等。 - 响应体(Response Body):包含实际返回的数据,如 HTML、CSS、JS、图片等。 #### 5. 数据传输 服务器将生成的响应通过 TCP 连接发送回客户端。这个过程中包括: - 服务器分段发送响应数据。 - 客户端接收数据并重组为完整的响应。 #### 6. 关闭 TCP 连接 数据传输完成后,TCP 连接将被关闭,通常包括以下步骤: 1. **客户端或服务器发起关闭请求**:发送一个 FIN(终止)包,表示请求关闭连接。 2. **另一方确认关闭请求**:接收到 FIN 包后,返回一个 ACK 包确认。 3. **对方发送关闭请求**:发送自己的 FIN 包,表示同意关闭连接。 4. **发起方确认关闭请求**:接收到 FIN 包后,返回一个 ACK 包确认,连接关闭。 #### 7. 客户端渲染页面 客户端接收到服务器返回的 HTML、CSS、JS 数据后,进行页面渲染,具体步骤如下: 1. **解析 HTML**:浏览器解析 HTML 文档,构建 DOM 树。 2. **解析 CSS**:浏览器解析 CSS 文件,生成 CSSOM 树。 3. **解析 JavaScript**:浏览器解析并执行 JavaScript 文件,可能会操作 DOM 树和 CSSOM 树。 4. **构建渲染树**:将 DOM 树和 CSSOM 树结合,生成渲染树。 5. **布局**:计算每个元素的布局信息(位置、大小)。 6. **绘制**:将页面内容绘制到屏幕上。发布于 2024-08-07 21:39 •IP属地 黑龙江举报评论收藏
公众号进入网站体验更佳

