《拆解一封网络信:HTTP 报文详解》


✉️ 第二篇:《拆解一封网络信:HTTP 报文详解》

上一篇我们知道:HTTP 是浏览器和服务器之间的一种"交流语言"。

那么,这门语言到底长什么样?浏览器到底说了什么话?服务器又是怎么回答的?

本篇,我们就要把这封"网络信"------HTTP 报文,彻底拆开看个明白。


一、HTTP 报文是什么?

在浏览器访问一个网站时,比如输入:

复制代码
https://www.example.com/

你看到的网页,其实是浏览器发送了一封"请求信"(Request),服务器收到后回了一封"回信"(Response)。

这两封信就是我们常说的 HTTP 报文(HTTP Message)

所以:

  • 请求报文:客户端(浏览器)发出的信;
  • 响应报文:服务器回来的信。

二、HTTP 报文的三大组成部分

HTTP 报文结构非常规整,分为三部分:

复制代码
起始行(Start Line)
请求/响应头(Headers)
消息体(Body)

我们先来看看 请求报文 长什么样👇


(1)请求报文实例

假设我们用浏览器访问百度:

复制代码
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
🔍 分析:
  • 第一行:请求行(起始行)

    • GET → 请求方法(表示要获取资源)
    • / → 资源路径
    • HTTP/1.1 → 协议版本
  • 后几行:请求头(告诉服务器一些额外信息)

  • 空一行后(这里没有 Body)→ 请求体

🌰 举个例子

就像你发快递时,快递单上写着:

收件人:服务器

快递内容:我想要这个网页

备注:我是谁,用什么浏览器看的


(2)响应报文实例

服务器收到请求后,回信如下:

复制代码
HTTP/1.1 200 OK
Date: Sun, 27 Oct 2025 05:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1256
Connection: keep-alive

<!DOCTYPE html>
<html>
<head><title>百度一下</title></head>
<body>...</body>
</html>
🔍 分析:
  • 第一行:状态行

    • 协议版本:HTTP/1.1
    • 状态码:200
    • 状态描述:OK(请求成功)
  • 接下来是响应头(告诉浏览器内容类型、长度等信息)

  • 空行后是响应体(HTML 网页内容)


三、请求方法:GET、POST、PUT、DELETE......

HTTP 提供了很多"动词"来表达请求意图:

方法 作用 示例
GET 获取资源 访问网页、加载图片
POST 提交数据 提交表单、登录信息
PUT 更新资源 修改用户资料
DELETE 删除资源 删除帖子
HEAD 获取响应头,不要内容 检查资源是否存在
OPTIONS 查看服务器支持哪些方法 预检请求(CORS 用)

🔧 小实验:

在命令行输入:

bash 复制代码
curl -v https://www.baidu.com

可以看到浏览器"说的话"和服务器"回的话"全过程,非常直观!


四、HTTP 状态码全家桶

状态码是服务器告诉浏览器:"这事儿我干得怎么样"的数字信号。

状态码 分类 含义
1xx 信息响应 已接收,继续处理
2xx 成功 一切正常
3xx 重定向 去别的地方看看吧
4xx 客户端错误 你请求错了
5xx 服务器错误 我这边出问题了

常见状态码:

状态码 含义
200 OK 请求成功
301 Moved Permanently 永久重定向(比如 HTTP→HTTPS)
302 Found 临时重定向
404 Not Found 页面不存在
500 Internal Server Error 服务器挂了
503 Service Unavailable 服务器暂时忙

💡 比如:当你访问了不存在的页面,服务器返回的就是:

复制代码
HTTP/1.1 404 Not Found

五、HTTP 头:浏览器与服务器的"沟通信号"

HTTP 头信息其实就像一堆"附言",告诉对方这次通信的详细情况。

📬 请求头常见字段

字段名 说明
Host 请求的主机名(域名)
User-Agent 浏览器信息
Accept 接受的内容类型
Accept-Encoding 支持的压缩格式
Cookie 携带登录状态

📤 响应头常见字段

字段名 说明
Content-Type 返回内容类型(HTML、JSON、图片等)
Content-Length 内容长度
Set-Cookie 设置浏览器 Cookie
Cache-Control 缓存策略
Server 服务器软件信息

六、HTTP Body:真正的"数据载体"

报文体(Body)部分就是实际传输的数据。

不同方法有不同内容:

  • GET 请求:通常没有 Body;
  • POST 请求:表单数据或 JSON 放在 Body 中。

🌰 例如 POST 登录请求:

复制代码
POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 48

{"username": "joon", "password": "123456"}

七、实战:用浏览器开发者工具观察 HTTP 报文

  1. 打开任意网页(如百度)

  2. 按下 F12 → 切换到 Network(网络) 面板

  3. 刷新页面

  4. 点击第一个请求(一般是主页)

  5. 你会看到:

    • Headers:请求头、响应头
    • Preview:网页内容
    • Timing:请求耗时

这就是 HTTP 报文的可视化形态。非常推荐你亲手操作一遍。


八、总结

部分 含义
请求行 / 状态行 说明操作意图或返回状态
头部 附加信息(谁发的、要什么、返回什么)
空行 分隔标志
消息体 实际内容(网页、图片、数据等)

九、下一篇预告 🚀

我们了解了"HTTP 报文"的样子,但它们是怎么在网络上传输的?

点击网页的一瞬间,数据经历了什么?

👉 下一篇:《从点击到响应:HTTP 请求是如何传出去的》

我们将带你走进 TCP、IP、DNS 的世界,看看一个请求的完整旅程!

相关推荐
YuMiao13 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
不可能的是2 天前
前端 SSE 流式请求三种实现方案全解析
前端·http
Jony_3 天前
高可用移动网络连接
网络协议
chilix3 天前
Linux 跨网段路由转发配置
网络协议
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
gihigo19985 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
2501_946205525 天前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
linux kernel5 天前
第七部分:高级IO
服务器·网络
数字护盾(和中)5 天前
BAS+ATT&CK:企业主动防御的黄金组合
服务器·网络·数据库