你在浏览器输入网址回车,背后发生了什么?答案就是 HTTP--Web 世界的通用语言。本文用 curl 实战拆解请求与响应的每个部分。

1. URL 的结构

https://user:pass@example.com:443/path/page?q=hello#section
└─┬─┘ └──┬──┘ └──┬───┘        └─┬─┘ └──┬───┘ └──┬──┘ └───┬───┘
协议   认证信息   主机名        端口    路径    查询参数   锚点

2. HTTP 请求

一个 GET 请求长这样:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/8.0
Accept: text/html
Cookie: session=abc123

核心要素:方法路径版本,加上若干请求头(Header)。

3. 常用请求方法

方法语义是否携带 Body幂等
GET获取资源
POST创建资源
PUT整体更新
PATCH部分更新
DELETE删除资源通常否

4. HTTP 响应与状态码

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Set-Cookie: lang=zh-CN

<html>...</html>

状态码按百位分组,记住这些就够用:

5. curl 实战演练

# 查看响应头
curl -I https://example.com

# 携带请求头
curl -H "Authorization: Bearer TOKEN" https://api.example.com/user

# POST JSON 数据
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "Ada"}'

# 跟随重定向并输出详细过程
curl -L -v https://example.com 2>&1 | head -30

6. 无状态与 Cookie

HTTP 本身是无状态的--服务器不记得你。解决方案:服务器通过 Set-Cookie 下发凭证,浏览器之后每次请求自动带上 Cookie 头,实现"登录状态"。如今更常见的是前端存 Token(localStorage)并在请求头中携带。

7. 缓存机制

缓存是 Web 性能的第一大杀器,核心分两类:

# 响应头示例
Cache-Control: max-age=86400        # 一天内直接用缓存
ETag: "33a64df5"                    # 内容的指纹
Last-Modified: Wed, 21 Oct 2026 07:28:00 GMT

# 浏览器下次请求会带上
If-None-Match: "33a64df5"
If-Modified-Since: Wed, 21 Oct 2026 07:28:00 GMT
# 服务器比对后没变化 → 304 Not Modified(不返回 body)

经验法则:静态资源(图片、CSS、JS)配长缓存;HTML 页面本身用协商缓存,保证更新能及时生效。

💡 调试利器:浏览器 DevTools → Network 面板能看到每个请求的完整头信息、耗时与瀑布图,是排查问题的最强工具。