[网络原理]http协议理论基础以及wireshark抓包分析(二)

前言:本文将简单介绍一下http协议.同时也借助抓包工具wireshark来对HTTP数据包的结构进行分析

HTTP 报文结构解析

HTTP协议是基于TCP数据报,做出的数据处理,处理后的数据结构在HTTP数据包中的结构也是不得不分析的一个重点

HTTP协议是一个文本协议(HTTP/1.1),文本的组织结构可以分为以下四种

(一) 请求包 (Request)

  1. 起始行 (Start Line): 包含方法(GET/POST)、URL、版本号。
  2. 头部 (Headers): 键值对形式,说明元数据(Host, User-Agent, Cookie)。
  3. 空行: 区分头部和正文的界限(非常重要,Wireshark 中能看到 \r\n)。
  4. 正文 (Body): 提交的数据。

下面是一个抓到的post请求包:

1. 起始行 (Start Line)

这一行定义了请求的基本动作和目标。

  • POST /mmtls/00003095 HTTP/1.1\r\n

    • POST: 请求方法,表示向服务器提交数据。

    • /mmtls/00003095: 请求的具体路径(URI)。从路径看,这是在进行 MMTLS 协议握手或数据传输。

    • HTTP/1.1: 使用的 HTTP 版本协议。

    • \r\n: 回车换行符,代表该行结束。


2. 请求头 (Request Headers)

这部分提供了关于客户端环境及请求正文的元数据。

  • Accept: */*\r\n: 告知服务器客户端可以接收任何格式的响应数据。

  • Cache-Control: no-cache\r\n: 强制要求不使用缓存,直接从服务器获取最新数据。

  • Connection: Keep-Alive\r\n: 请求服务器保持 TCP 连接开启,以便后续复用,减少握手开销。

  • Content-Length: 475\r\n : 告知服务器,接下来的"正文"部分长度为 475 字节

  • Content-Type: application/octet-stream\r\n : 表示正文是二进制流数据(通常用于加密内容或文件传输)。

  • Host: 240e:97c:2f:3046::21\r\n: 目标服务器的 IPv6 地址。

  • Upgrade: mmtls\r\n : 这是一个关键头,表示客户端希望将连接协议升级/切换为微信特有的 mmtls 加密协议。

  • User-Agent: MicroMessenger Client\r\n : 客户端标识,说明发送方是微信客户端

  • X-Online-Host: 240e:97c:2f:3046::21\r\n: 一个自定义的扩展头,通常用于代理服务器或 CDN 识别真实的目标主机。


3. 空行 (Empty Line)

  • \r\n

    • 在最后一个请求头(X-Online-Host)之后,有一个完全空白的行。这是 HTTP 协议标准规定的,用于分隔请求头和正文

4. 正文 (Body / Payload)

  • Data (475 bytes)

    • 这部分对应截图最下方的 Data 栏。

    • 由于 Content-Typeapplication/octet-stream,且涉及到 mmtls 协议,这些数据(十六进制显示的 1a 22 50 18...)是经过加密的二进制数据,无法直接通过肉眼读出具体明文内容。


(二) 响应包 (Response)

响应包是对于客户端发来的数据做出的一个处理,格式上与请求包有略微不同

但是总体也是可以分为四个部分

  1. 起始行: 包含版本号、状态码(200, 404, 500)、状态描述。
  2. 头部: 包含 Server, Content-Type, Set-Cookie 等。
  3. 空行: /r/n
  4. 正文: 返回的 HTML、JSON 或图片数据。

下面是一个使用wireshark的HTTP数据包的抓包结果

1. 起始行 (Status Line / Start Line)

图中第一行:HTTP/1.1 200 OK\r\n

  • 版本号: HTTP/1.1

  • 状态码: 200(代表请求成功)。

  • 状态描述: OK

  • 意义: 告诉客户端,服务器已经成功收到了请求并处理完毕。


2. 响应头部 (Response Headers)

Content-LengthCache-Control 的这几行都是头部信息:

  • Content-Length: 22长度字段.告诉浏览器:接下来的正文只有 22 个字节

  • Content-Type: text/plain媒体类型声明。告诉浏览器:这是纯文本,直接显示就行,不需要渲染成网页。

  • Date : 服务器发送响应的时间。不仅是展示,也用于客户端判断缓存是否过期。

  • Connection: close : 连接管理。告诉客户端:这个请求发完我就断开 TCP 连接了,别等了(非持久连接)。

  • Cache-Control :缓存策略。允许客户端把这个测试结果存 30 秒,在这期间不需要重新向服务器发请求。


3. 空行 (Empty Line)

图中那一行孤零零的 \r\n

  • 这就是理论中提到的第三部分。它在响应头部(Headers)和响应正文(Body)之间划清了界限。

  • 在底层传输中,它是两个连续的换行符。没有它,客户端就不知道头部在哪里结束,正文从哪里开始。


4. 响应正文 (Response Body / Entity Body)

对应图中最后两行展开的内容:

  • File Data: 22 bytes:Wireshark 提示这里有 22 字节的数据。

  • Line-based text data : 具体的内容是 Microsoft Connect Test


不过要注意到抓包数据中有显示的使用[ ]包裹的数据,要注意这并不是响应数据包内包含的数据,而是工具的辅助分析的数据,我们在点击对应的行时,不会在右边的字节视图中显示对应的字节序列

http数据包中的数据都是明文传输的,这样也就会带来数据泄露的风险,会被他人窃取.https协议就由此而生.


(三)总结与对比

下面是一个HTTP协议的请求包和响应包的总结与对比:

特性 请求包 (Request) 响应包 (Response)
发送方 客户端 (如浏览器、手机 App) 服务器 (如 Web Server)
接收方 服务器 客户端
第一行 (起始行) 请求行 (Request Line) 示例: GET /index.html HTTP/1.1 状态行 (Status Line) 示例: HTTP/1.1 200 OK
核心组成部分 方法 (Method)、路径 (URI)、版本号 版本号、状态码 (Status Code)、状态描述
常见关键头部 Host, User-Agent, Accept, Cookie Server, Content-Type, Set-Cookie
正文内容 (Body) 通常出现在 POST/PUT 中,包含提交的表单数据或上传的文件 包含服务器返回的数据,如 HTML 源码、JSON 数据、图片等
成功标志 使用正确的 Method (如 GET) 访问有效资源 状态码为 2xx (如 200 OK)
失败标志 4xx (请求错误,如 404) 5xx (服务器错误,如 500)

有关HTTP协议的相关介绍就到这里了,如有纰漏还请指出

相关推荐
双星系统2 小时前
ABB机器人DSQC 679示教器电缆选型与故障排查(附原装型号对照表)
网络·数据库·机器人·工业4.0·工业机器人
炸炸鱼.2 小时前
Nginx 代理与缓存实战:正向、反向及网络层级详解
网络·nginx·缓存
5G行业应用2 小时前
6G未来网络架构ATHENA愿景——《2026韩国SK电讯6G白皮书》
网络·架构
一去不复返的通信er2 小时前
5G系统级仿真
网络·5g
cheems95274 小时前
[网络原理]http协议理论基础以及wireshark抓包分析(一)
网络·http·wireshark
Oliver_LaVine6 小时前
Windows11使用VMware Workstation Pro 安装macOS Sonoma 14.4系统
网络
条tiao条6 小时前
从 “猜数字游戏” 入门 BST:C 语言从零实现与核心操作
c语言·网络·游戏
lichenyang4536 小时前
OSI(Open System interconnection)
网络
MinterFusion7 小时前
云主机服务单价 —— 评估云主机性价比的指标
网络·云主机·明德融创·价格评价·云主机服务单价·服务单价