步步糕升 发表于 7 天前

看懂 HTTP Header:网络请求里的说明书与通行证


做 Web 开发、接口调试时,浏览器开发者工具 Network 面板里总能看到大量 Header(HTTP 标头 / 请求头、响应头)。很多初学者会忽略它,实际上 Header 是 HTTP 通信的元数据,以键‑值对的形式,承载身份凭证、数据格式、缓存策略、跨域规则、客户端信息、安全策略等关键信息。接口调试、登录鉴权、跨域排错、性能缓存优化、Web 安全防护,几乎处处都离不开 HeaderPostman。
提示:本文为 Web 开发技术科普,案例仅用于学习演示,生产环境需要结合业务做安全加固。

一、什么是 HTTP Header,通俗理解

一次 HTTP 通信分为两大部分:Header 头部 + Body 消息体。用快递做类比:

[*]Body 消息体 = 快递包裹内部货物,就是接口返回的 JSON、HTML 网页、图片二进制、表单提交数据;
[*]Header 头部 = 快递外包装标签,写清楚寄件来源、货物类型、运输要求、身份凭证、缓存规则、安全约束,告诉客户端和服务器该如何处理这份数据。
Header 分为两大类:

[*]请求头 (Request Header):客户端→服务器浏览器、App、Postman 等客户端发出请求时附带。相当于客户端告诉服务器:我是谁、我传的数据是什么格式、我希望拿到什么格式返回结果、我的身份凭证、请求来自哪里。
[*]响应头 (Response Header):服务器→客户端服务器处理完成之后返回给浏览器。相当于服务器告诉客户端:返回的数据是什么类型、是否允许跨域、缓存多久、需要写入哪些 Cookie、有哪些安全限制。
注意:Header 只是附加说明,业务数据放在 Body。但 Header 会直接影响服务器解析参数、身份校验、浏览器渲染、缓存行为。
二、高频请求头(客户端发给服务器)

1. Content‑Type

描述请求体 Body 的数据格式,服务器依靠这个值解析 Body 内容,写错就会出现 “前端传了参数,后端接收不到” 的经典 bug。

[*]application/json:JSON 格式,前后端 API 接口最常用;
[*]application/x‑www‑form‑urlencoded:普通网页表单提交;
[*]multipart/form‑data:文件上传场景;
[*]text/plain:纯文本。
2. Accept

告诉服务器:我客户端希望接收什么格式的返回数据。例:Accept: application/json 希望返回 JSON;Accept: text/html希望返回 HTML 网页。
3. Authorization

身份认证凭证,登录接口之后的业务接口携带令牌。

[*]Bearer token字符串:JWT / Token 鉴权最普遍;
[*]Basic Auth:账号密码 base64 编码;也可以放 API‑Key、自定义签名信息。
4. Cookie

浏览器自动携带,存放会话标识、登录状态、用户偏好设置,用于会话登录。
5. User‑Agent

标记客户端身份:浏览器版本、操作系统、App、爬虫、Postman 工具。服务器可根据 UA 做兼容、爬虫拦截。
6. Host

目标访问主机域名,一台服务器托管多个网站时必不可少。
7. Referer / Origin


[*]Referer:这个请求是从哪个页面跳转过来,用于来源统计、防盗链;
[*]Origin:协议 + 域名 + 端口,专门用于浏览器跨域 CORS 校验。
8. 缓存、性能相关


[*]Cache‑Control: no‑cache:不要直接读缓存,向服务器校验资源是否更新;
[*]If‑None‑Match:配合 ETag,条件请求,资源没变化返回 304,减少传输流量;
[*]Accept‑Encoding: gzip, br:客户端支持的压缩算法,服务器可以返回压缩内容,减小体积;
[*]Accept‑Language:客户端偏好语言。
9. 网关代理链路


[*]X‑Forwarded‑For:经过 Nginx / 网关代理时,传递真实用户客户端 IP;
[*]X‑Request‑ID / Trace‑ID:链路追踪 ID,微服务排查问题,追踪一次请求流经哪些服务。
三、高频响应头(服务器返回给客户端)

1. Content‑Type

告诉客户端响应 Body 是什么格式:application/json;charset=utf‑8、text/html;charset=utf‑8、image/png。字符集charset=utf‑8缺失容易出现中文乱码。
2. Set‑Cookie

命令浏览器写入 Cookie。生产环境强烈建议搭配属性:HttpOnly禁止 JS 脚本读取 Cookie,防 XSS 窃取;Secure仅 HTTPS 协议下传输;SameSite防御 CSRF 跨站请求伪造攻击。示例:Set‑Cookie: sessionId=xxx; HttpOnly; Secure; SameSite=Strict。
3. Location

配合 301/302/307 重定向状态码,告诉浏览器跳转到哪个 URL。
4. 缓存控制


[*]Cache‑Control:控制浏览器、CDN 缓存时长与策略,例如max‑age=3600缓存一小时;
[*]ETag资源指纹,Last‑Modified最后修改时间,用于条件请求 304 缓存优化。
5. CORS 跨域相关

Access‑Control‑Allow‑Origin,规定哪些域名可以跨域访问本接口,解决浏览器跨域报错。
6. Web 安全响应头(生产必备)


[*]Strict‑Transport‑Security(HSTS):强制浏览器后续使用 HTTPS 访问;
[*]Content‑Security‑Policy(CSP):限制页面可以加载哪些脚本、图片资源,降低 XSS 注入风险;
[*]X‑Frame‑Options:禁止页面被 iframe 嵌套,防御点击劫持;
[*]X‑Content‑Type‑Options: nosniff:阻止浏览器猜测文件 MIME 类型,防止类型混淆攻击。
四、开发调试中常见实际场景


[*]接口 POST 传 JSON 但是后端拿不到参数优先检查请求头Content‑Type,是否设置application/json,设置错误后端无法正确解析 JSON 报文。
[*]登录之后调用业务接口返回 401 未授权确认后续请求是否带上Authorization: Bearer xxxToken;Cookie 模式则确认 Cookie 是否正常携带。
[*]浏览器跨域报错查看请求Origin和响应头Access‑Control‑Allow‑Origin是否匹配。
[*]网页中文乱码检查响应头Content‑Type是否配置charset=utf‑8。
[*]微服务排查请求链路依靠X‑Request‑ID追踪整条调用链路日志。
五、生产环境 Header 安全最佳实践


[*]Cookie 尽量开启HttpOnly、Secure、SameSite属性,减少 XSS、CSRF 风险。不要把敏感凭证放在普通 JS 可读取的 Cookie。
[*]敏感认证 Header、Token 不要完整打印到服务端日志,防止日志泄露凭证。
[*]配置安全响应头 HSTS、CSP、X‑Frame‑Options,加固 Web 防御。
[*]鉴权、防重放的签名、时间戳等信息,可以放到自定义 Header 完成校验。
[*]尽量不要滥用旧的X‑前缀自定义头,现代规范不再强制要求 X‑前缀。
六、常见误区澄清

❌误区 1:Header 就是业务参数,可以随便把业务数据全部放 Header✅真相:Header 是元信息,适合身份、标识、策略;大批量业务数据建议放在 Body。Header 总长度有上限,过大请求会报错。
❌误区 2:Content‑Type 写对,Accept 就无所谓✅真相:Content‑Type 描述我发出去的数据格式;Accept 描述我希望接收的数据格式,二者作用完全不同。
❌误区 3:Header 只是浏览器才会有,后端接口调用不需要关心✅真相:curl、Postman、服务端 HTTP 调用全部都带 Header,鉴权、格式解析逻辑完全一致。
❌误区 4:安全响应头只是可选功能,线上可以不加✅真相:CSP、HSTS、X‑Frame‑Options 可以有效降低 XSS、点击劫持风险,是 Web 安全基础加固手段。
七、全文总结

HTTP Header 就是 HTTP 请求与响应的说明书与通行证。

[*]请求头(客户端→服务器):告诉服务器 “我是谁、我发的是什么、我想要什么、我来自哪里”;
[*]响应头(服务器→客户端):告诉客户端 “返回的是什么、如何缓存、怎么设置 Cookie、跨域规则、安全约束”。
Body 承载业务真实数据,Header 承载元数据。接口调试排错、登录鉴权、跨域、缓存性能优化、Web 安全防护,都离不开对 Header 的理解。很多诡异接口 bug,根源往往只是一个 Header 配置错误。

页: [1]
查看完整版本: 看懂 HTTP Header:网络请求里的说明书与通行证