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

相关推荐
我叫汪枫4 小时前
《HTTP 中的“握手”:从 TCP 到 TLS 的安全通信之旅》
tcp/ip·安全·http
甄心爱学习4 小时前
计算机网络6
网络·计算机网络
你好,赵志伟4 小时前
NAT、代理服务、内网穿透
网络·智能路由器
一个处女座的程序猿O(∩_∩)O4 小时前
实现 AI 流式响应:从等待到实时交互的技术解析
网络·人工智能·交互
kevien_G15 小时前
TCP与UDP深度理解
网络协议·tcp/ip·udp
周杰伦_Jay5 小时前
【计算机网络核心】TCP/IP模型与网页解析全流程详解
网络·网络协议·tcp/ip·计算机网络·算法·架构·1024程序员节
盒马盒马5 小时前
Rust:函数与控制流
开发语言·网络·rust
qq_310658515 小时前
webrtc代码走读(七)-QOS-FEC-ulpfec rfc5109
网络·c++·webrtc