《拆解一封网络信: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 的世界,看看一个请求的完整旅程!

相关推荐
wWYy.21 小时前
C++-集群聊天室(2):muduo网络库
网络·c++
珠海西格21 小时前
远动通信装置为何是电网安全运行的“神经中枢”?
大数据·服务器·网络·数据库·分布式·安全·区块链
java干货21 小时前
微服务:把一个简单的问题,拆成 100 个网络问题
网络·微服务·架构
LcVong21 小时前
WPF MediaPlayer获取网络视频流当前帧并展示图片完整范例
网络·wpf
新缸中之脑1 天前
Moltbook:OpenClaw的社交网络
网络
岚天start1 天前
Python HTTP服务器添加简单用户名密码认证的三种方案
服务器·python·http
开开心心就好1 天前
键盘映射工具改键位,绿色版设置后重启生效
网络·windows·tcp/ip·pdf·计算机外设·电脑·excel
不知名。。。。。。。。1 天前
传输层————TCP/UDP
网络协议·tcp/ip·udp
zhengfei6111 天前
MCP 将帮助防御者更努力、更智能地进行检测工程
网络
郝学胜-神的一滴1 天前
Linux Socket模型创建流程详解
linux·服务器·开发语言·网络·c++·程序人生