欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > HTTP请求过程详解

HTTP请求过程详解

2025/3/26 0:45:15 来源:https://blog.csdn.net/2401_83342251/article/details/146445210  浏览:    关键词:HTTP请求过程详解

一、整体流程概述

HTTP请求过程从用户输入URL开始,到页面完成渲染结束,主要分为 DNS解析、建立连接、发送请求、处理响应、渲染页面、断开连接 六个核心阶段。

重要

当用户输入URL后,浏览器首先解析域名,通过DNS查询获取服务器IP。接着通过三次握手建立TCP连接,如果是HTTPS还会进行TLS加密协商。然后浏览器发送HTTP请求,服务器处理后返回响应数据。浏览器解析HTML/CSS,构建DOM和渲染树,最终绘制页面。完成渲染后,通过四次挥手断开连接。整个过程涉及网络协议、服务器处理、浏览器渲染等多个环节,优化手段包括使用HTTP/2、CDN和缓存策略等

二、分步骤详细说明

1、URL解析与DNS查询

(1)核心步骤:

  • 浏览器解析URL,分离协议(HTTP/HTTPS)、域名(如 www.example.com)、路径。
  • DNS查询:

        检查浏览器缓存 → 系统缓存 → 路由器缓存 → 本地DNS服务器。

        若缓存未命中,递归查询至根DNS → 顶级域DNS(如 .com)→ 权威DNS,最终获取目标IP(如 93.184.216.34)。

(2)示例:输入https://www.baidu.com,浏览器通过DNS解析获取服务器IP地址。

2、建立TCP连接(三次握手)

  • 目的:确保可靠传输。

  • 流程

    1. 客户端发送 SYN包(序列号x),请求建立连接。

    2. 服务器返回 SYN-ACK包(序列号y,确认号x+1),确认客户端的连接请求。

    3. 客户端发送 ACK包(确认号y+1),确认服务端的响应,双方正式建立连接。

  • 关键点
    三次握手确保双方确认彼此的收发能力,HTTP默认端口80,HTTPS为443。

  • 为什么需要三次握手?

        防止历史重复连接的初始化,确保上方收发能力正常

具体回答如下:

        三次握手的核心目的是确保双方具备双向通信能力,并同步初始序列号。如果只有两次握手:

  1. 无法防止历史连接:网络延迟导致的旧SYN报文可能让服务器误建连接,浪费资源。

  2. 无法验证客户端接收能力:服务器无法确认客户端能否正常接收数据。
    三次握手通过客户端对服务器SYN的确认(第三次ACK),既解决了历史连接问题,又验证了双向通信能力,是可靠性与效率的最佳平衡。

3、TLS握手(仅HTTPS)

  • 流程

    1. 客户端发送支持的加密套件列表。

    2. 服务器返回证书和选择的加密套件。

    3. 客户端验证证书(如CA机构颁发),生成对称密钥并用公钥加密发送。

    4. 双方切换至对称加密通信。

  • 示例
    HTTPS通过TLS加密,防止中间人攻击,确保数据安全。

4、发送HTTP请求

  • 请求结构

    • 请求行:方法(GET/POST)、路径(/index.html)、协议版本(HTTP/1.1)。

    • 请求头Host(域名)、User-Agent(客户端信息)、Cookie(身份凭证)。

    • 请求体:POST/PUT方法时携带的表单数据。

  • 示例

    http

    GET /index.html HTTP/1.1
    Host: www.example.com
    User-Agent: Chrome/91.0

5、服务器处理与返回响应

  • 服务器处理

    • Web服务器(如Nginx)接收请求,转发至后端应用(如Node.js)。

    • 应用执行业务逻辑(如查询数据库),生成响应内容(HTML/JSON)。

  • 响应结构

    • 状态行:状态码(200 OK、404 Not Found)。

    • 响应头Content-Type(数据类型)、Cache-Control(缓存策略)。

    • 响应体:HTML、图片等数据。

  • 示例

    HTTP/1.1 200 OK
    Content-Type: text/html
    <html>...</html>

6、浏览器解析与渲染

  • 关键步骤

    1. 解析HTML构建DOM树:将HTML标签转换为树形结构。

    2. 解析CSS生成CSSOM树:确定样式规则。

    3. 合并渲染树:DOM + CSSOM → 确定可见元素。

    4. 布局(Layout):计算元素的位置和尺寸。

    5. 绘制(Paint):将像素输出到屏幕。

  • 优化点
    “JS可能阻塞渲染,建议将脚本放在底部或使用async/defer。”

7、断开连接(四次挥手)

  • 流程

    1. 客户端发送 FIN包,请求关闭(通知对方不要再发送数据,但可以接收数据)。

    2. 服务器返回 ACK包(确认收到关闭请求,但可能仍有数据需要发送)。

    3. 服务器发送 FIN包(通知对方自己已做好准备断开连接)。

    4. 客户端返回 ACK包,连接关闭(确保服务器收到最后的确认,防止旧数据干扰新连接)。

  • 意义
    四次挥手确保双方数据完整传输,避免资源泄漏。

  • 为什么需要四次挥手?

TCP是全双工协议,双方需要独立关闭各自的发送通道。客户端发送FIN表示不再发送数据,但服务器可能仍有数据要传输,因此先回复ACK确认,处理完数据后再发送自己的FIN。若合并为三次挥手,可能导致数据未发送完毕就被强制关闭。四次挥手的设计确保了双向通道的可靠关闭,同时通过TIME-WAIT状态解决网截断络延迟导致的报文冲突问题。

三、对比三次握手和四次挥手:

阶段三次握手四次挥手
目的建立双向通信能力关闭双向通信能力
报文合并SYN和ACK可合并(SYN-ACK)ACK和FIN一般不能合并
关键原因建立连接时无数据传输断开连接时可能存在未发完的数据

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词