计算机网络——应用层 HTTP 协议分析
基础概念
HTTP(HyperText Transfer Protocol,超文本传输协议)是用于传输超文本数据(如 HTML、图像、视频)的应用层协议,基于 TCP,默认端口为 80(HTTPS 为 443)。其核心特点包括:
无状态:每次请求和响应独立,服务器不自动保存客户端状态(通过 Cookie 或 Session 弥补)。
请求-响应模型:规定了客户端(浏览器)与服务器间的传输规范,客户端(通常是浏览器)发送请求,服务器返回响应。
灵活性:支持多种数据类型(文本、图像、音视频等)。
HTTP 版本号
常见的 HTTP 版本号为:1.0、1.1(常用)、2.0(常用,兼容 1.1)、3.0(基于 UDP)。
HTTP/1.0:是首个标准化版本,采用短连接模式,每次请求和响应,都要开始前三次握手,结束后四次挥手,效率低下且无状态管理。
HTTP/1.1:通过引入长连接(Connect:Keep-Alive)实现 TCP 连接复用,并支持交替传输。
HTTP/2.0:强制使用 HTTPS 加密,并兼容 HTTP/1.1,不再传输字符串,都是字节码(节省内存、流量、提高性能),支持交错运行,报文分段,同时支持服务器主动向客户端推送。
HTTP/3.0:基于 UDP,有 QUIC,尚未普及,仍处于理论中。
URL 结构
URL(Uniform Resource Locator,统一资源定位符)用于定位互联网上的资源,比如网页、图片、视频等,格式如下:
<协议>://<主机名>:<端口>/<路径>?<查询参数>#<片段标识符>
协议(Scheme)
定义访问资源使用的协议(如
http、https、ftp)。示例:
https://
主机名(Host)
可以是域名或 IP 地址。
示例:
blog.xiaqy.top
端口(Port,可选)
指定服务运行的端口号,默认端口可省略(如 HTTP 默认 80,HTTPS 默认 443)。
示例:
:8080
路径(Path)
资源在服务器上的具体位置,通常类似文件路径。
示例:
/articles/url-format
查询参数(Query,可选)
以
?开头,多个参数用&分隔,形式为key=value。示例:
?page=1&sort=date
片段标识符(Fragment,可选)
以
#开头,指向资源内的某个部分(如 HTML 锚点)。示例:
#section2
HTTP 请求报文
请求行
请求行的格式:
方法 请求URL和参数 HTTP版本,如POST /login.php HTTP/1.1常见的请求方式是 GET 和 POST。
请求行方法 GET 与 POST 的区别
请求头
客户端(如浏览器、API 调用)向服务器发送请求时,请求头用于传递附加信息,帮助服务器正确处理请求。
Host
描述:指定访问的服务器域名或 IP 地址。
示例:
Host: blog.xiaqy.top
Connection
描述:指示 TCP 连接在请求后是否保持或关闭。
详情:
从 HTTP/1.1 开始,多个请求和响应可复用同一 TCP 连接。
keep-alive:启用 TCP 长连接,允许后续 HTTP 请求复用同一连接。close:响应后或长时间空闲后,TCP 连接将关闭。
示例:
Connection: keep-alive
User-Agent
描述:标识发出请求的客户端(浏览器、设备或应用)版本。
用途:帮助服务器根据客户端特性定制响应。
示例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0
Accept
描述:指定客户端可接受的响应 MIME 类型。
详情:
HTTP 使用 MIME 类型(而非文件扩展名)标识内容类型。
常见 MIME 类型:
text/html:HTML 文档application/json:JSON 数据image/png:PNG 图片application/pdf:PDF 文件
参考:MIME 类型列表
Accept-Encoding
描述:列出客户端支持的压缩方式(如 gzip、deflate)。
详情:
从 HTTP/1.0 开始,请求和响应流量可通过 gzip 等压缩方式传输,浏览器和服务器自动解压。
示例:
Accept-Encoding: gzip, deflate
Accept-Language
描述:指定客户端支持的语言。
用途:服务器可根据语言偏好返回合适的响应内容。
示例:
Accept-Language: zh-CN, zh; q=0.9, en; q=0.8
Content-Type
描述:指明 POST 请求体的 MIME 类型。
详情:
通常仅对 POST 请求有意义。
重要 MIME 类型:
application/x-www-form-urlencoded:表单数据编码multipart/form-data:文件上传application/json:JSON 数据
示例:
Content-Type: application/x-www-form-urlencoded

Content-Length
描述:表明请求体的字节大小。
详情:通常仅对 POST 请求有意义。
示例:
Content-Length: 88

Referer
描述:告知服务器请求来源的页面 URL。
用途:用于分析用户来源或防止未经授权的请求。
示例:
Referer: https://www.baidu.com/index.htm
Cookie
描述:保存至浏览器的凭据信息,用于状态管理。
详情:
Cookie:客户端存储的键值对,服务器通过
Set-Cookie头设置。Session(较为安全的 Cookie):基于服务器端的会话管理,通过
Set-Cookie传递 Session ID。
Cookie 与 Session 的区别
请求空行
在 HTTP 协议中,请求空行是 HTTP 请求报文中的一个关键部分,用于 分隔请求头和请求体。它的作用类似于一个结束标记,告诉服务器头部的结束位置。
请求体
请求体用于向服务器发送数据(如表单提交、JSON、文件上传等)
GET 请求方式中请求体为空
POST 请求方式请求体是可选项
HTTP 响应报文
响应行
响应行的格式:
HTTP版本 状态码 原因短语,如HTTP/1.1 302 Found状态码:是一个三位数字代码,用于表示服务器对请求的处理结果。
响应状态:响应中服务器返回的状态码和对应的状态消息,如
Found。
具体状态码示例:
100 continue
200 响应成功
302 重定向/跳转
304 缓存资源没有修改
403 拒绝访问
404 访问资源不存在
405 请求方式不允许
500 服务器无法处理
502/503/504 服务器无响应
响应头
服务器返回响应时,响应头包含元数据,指导客户端如何处理响应(如缓存、编码、安全策略等)。
响应头大都与请求头相似。
#日期
Date: Thu,19Jun 2025 05:57:33 GMT
#中间件版本
Server: Apache/2.4.10 (Debian)
#压缩类型
Content-Encoding: gzip
#响应体的长度
Content-Length:2690
#响应体的类型
Content-Type: text/html;charset=utf-8
响应空行
在 HTTP 协议中,响应空行是 HTTP 请求报文中的一个关键部分,用于 分隔响应头和响应体。它的作用类似于一个结束标记,告诉服务器头部的结束位置。
响应体
是服务器返回给客户端的实际数据内容,通常用于传输网页、JSON、文件、流媒体等。
抓包与调试
Wireshark 抓包
使用 Wireshark 分析 HTTP 流量,设置过滤器 http 可查看请求和响应的详细信息,包括:
请求方法、URL、头等信息。
响应状态码、响应体等内容。
TCP 连接的建立和关闭(三次握手、四次挥手)等。


浏览器开发者工具
浏览器开发者工具提供以下功能:
元素:查看渲染后的 DOM 结构和 CSS 样式。
[!Important]
元素的 HTML 标签是浏览器渲染、解析 js 之后的代码。
右键界面查看源代码,查看的是未经解析的响应体原始内容。
控制台:执行 JavaScript 代码的交互式终端,调试错误,如
alert("Hello")。源代码:查看、调试、修改网站前端代码,支持断点调试。
网络:查看网页中的请求和响应。
应用:查看、管理 Cookie 等。

评论区