HTTP Headers 完全指南:请求头、响应头与爬虫伪装技巧
HTTP 消息头(HTTP Headers)是 HTTP 请求和响应中携带元数据的关键组件。它们告诉服务器客户端是谁、能接受什么格式的内容、从哪个页面跳转过来等信息。无论是 Web 开发者、爬虫工程师还是安全研究人员,理解 HTTP 头都是必备技能。
HTTP 客户端-服务器模型
互联网本质上是客户端-服务器架构:你的浏览器(客户端)发送 HTTP 请求到网站服务器,服务器处理请求后返回响应。HTTP 头就夹在请求和响应中,传递各种控制信息。对于爬虫和无头浏览器工具来说,正确设置 HTTP 头是避免被反爬系统检测的关键。
常见请求头
Host
指定请求的目标域名。当一台服务器托管多个网站时,Host 头告诉服务器你要访问哪个站点。每个 HTTP/1.1 请求必须包含 Host 头。
User-Agent
User-Agent 字符串标识发起请求的客户端类型(浏览器、爬虫、脚本等)。很多爬虫工具和抢鞋机器人因为用了不合理的 UA 而被反爬系统识别。建议使用真实浏览器的 UA 字符串。
Accept / Accept-Language / Accept-Encoding
告诉服务器客户端能接受什么类型的内容。Accept 指定 MIME 类型(如 text/html)、Accept-Language 指定语言偏好、Accept-Encoding 指定压缩方式(如 gzip)。
Referer
告诉服务器用户从哪个页面跳转过来的。注意这个单词本身拼写就是错的(少了一个 r),但这是 HTTP 规范历史遗留问题。
Cookie
携带之前服务器设置的 Cookie 数据,用于会话保持和身份认证。
X-Forwarded-For
当请求经过代理时,这个头记录了原始客户端的 IP 地址。如果你用了代理而且这个头设置不当,目标服务器可以看到你的真实 IP。
常见响应头
Content-Type
告诉客户端返回内容的 MIME 类型,如 text/html、application/json。
Set-Cookie
服务器通过此头向客户端设置 Cookie。配合 Cookie 请求头实现会话管理。
Cache-Control
控制缓存行为。常见值:no-cache(每次验证)、max-age(缓存时间)、no-store(不缓存)。
Location
用于重定向,配合 301/302 状态码,告诉浏览器跳转到新 URL。
爬虫场景下的 HTTP 头技巧
如果你在做网页爬虫,以下 HTTP 头设置能帮你避免被检测和封禁:
- 设置真实浏览器的 User-Agent
- 添加合理的 Referer 头
- 设置正确的 Accept-Language
- 携带正确的 Cookie
- 避免使用诸如 Python-urllib 等暴露身份的头
对于大规模采集,可以参考 Web Crawler 最佳实践。
如何查看 HTTP 头
- 浏览器开发者工具:按 F12 → Network 标签 → 点击任意请求查看 Headers
- curl 命令:
curl -I https://example.com(仅响应头)或curl -v https://example.com(包含请求头) - Python requests:
response.headers - Burp Suite / Charles:专业抓包工具