HTTP 常见请求头和响应头有哪些?Host、Referer、User-Agent 分别有什么用?
简化版
HTTP Header 是请求/响应的元数据。常见请求头有 Host、User-Agent、Referer、Authorization、Cookie、Accept、Content-Type;常见响应头有 Set-Cookie、Cache-Control、Location、Content-Type、Content-Encoding、安全响应头等。
详细版
面试常问几个高频 Header:
Host:说明访问的域名,同一 IP 上虚拟主机路由必须依赖它;HTTP/1.1 要求有 Host。User-Agent:标识客户端类型、系统、浏览器版本,可用于兼容处理和统计,但不可信。Referer:表示当前请求从哪个页面来,常用于防盗链、统计、CSRF 辅助判断,但可能被隐藏或伪造。Authorization:携带认证凭证,例如 Bearer Token。Cookie/Set-Cookie:客户端带会话信息,服务端设置 Cookie。Location:配合 3xx 做重定向。Cache-Control、ETag、Last-Modified:控制缓存。
答题时最好按“路由、认证、缓存、内容协商、安全、追踪”分类讲,而不是散背一堆名字。
完整版教学
一、Header 是 HTTP 的控制面
HTTP 的 body 装业务数据,Header 装控制信息。没有 Header,服务器不知道你访问哪个域名、body 是 JSON 还是表单、是否带登录态、能不能压缩、是否命中缓存。
GET /articles HTTP/1.1
Host: offer.aigcbaba.com
User-Agent: Chrome/...
Accept: text/html
Cookie: sid=abc
这些字段不一定都安全可信,但它们决定了请求如何被网关、CDN、浏览器、服务端框架理解。
记忆钩子:HTTP Header 像快递单,body 像包裹;快递单写错,包裹内容再对也可能送错。
二、Host 为什么非常关键
现代服务器常常多个域名共用一个 IP。TCP 连接只能连到 IP 和端口,HTTP 层要靠 Host 区分用户想访问哪个站点。
1.2.3.4:443
├─ offer.aigcbaba.com
├─ api.aigcbaba.com
└─ static.aigcbaba.com
如果没有 Host,反向代理就不知道该路由到哪个虚拟主机。HTTPS 场景里,TLS 握手阶段还会用 SNI 提前告诉服务器域名,用于选择证书;HTTP 请求阶段仍会带 Host。
三、User-Agent 能用但不能信
User-Agent 用于标识客户端,例如浏览器、爬虫、App、命令行工具。服务端可以据此做兼容、统计、灰度,但不能把它当安全依据。
| 用途 | 是否适合 | 原因 |
|---|---|---|
| 统计浏览器分布 | 适合 | 大致可用 |
| 返回移动端兼容页面 | 可用但要谨慎 | UA 格式复杂 |
| 判断是否真实用户 | 不可靠 | 很容易伪造 |
| 鉴权授权 | 不适合 | 没有安全性 |
例如 curl 可以随手加 -A "Chrome" 伪装 UA,所以安全策略不能依赖它。
四、Referer 和 Referrer-Policy
Referer 记录请求来源页面,名字历史上拼错了但沿用至今。它常用于统计来源、防盗链和辅助安全判断。
Referer: https://example.com/articles/1
但 Referer 可能不存在:用户直接输入 URL、从 HTTPS 跳 HTTP、浏览器隐私策略、页面设置 Referrer-Policy 都可能让它被裁剪或不发送。因此它只能辅助判断,不能作为唯一认证条件。
五、认证、Cookie 与追踪类 Header
认证常用 Authorization,浏览器会自动带同站 Cookie,服务端通过 Set-Cookie 写入 Cookie。分布式系统里还常见 X-Request-Id、traceparent 这类追踪头。
| Header | 方向 | 作用 |
|---|---|---|
Authorization | 请求 | 携带 Bearer/JWT/Basic 凭证 |
Cookie | 请求 | 浏览器带会话数据 |
Set-Cookie | 响应 | 服务端设置 Cookie |
X-Request-Id | 请求/响应 | 串联日志 |
traceparent | 请求 | W3C Trace Context |
注意外部传来的用户信息类 Header 不能直接信任。网关透传用户身份给后端时,要清洗客户端伪造的同名 Header。
六、响应 Header 决定浏览器行为
响应头会影响缓存、重定向、下载、压缩和安全。比如 Cache-Control 决定缓存策略,Location 决定重定向目标,Content-Disposition 决定是否下载,Content-Security-Policy 能降低 XSS 风险。
HTTP/1.1 302 Found
Location: /login
Cache-Control: no-cache
Set-Cookie: sid=abc; HttpOnly; Secure; SameSite=Lax
一个接口返回 200 但 Content-Type 错成 text/plain,浏览器或客户端 SDK 可能无法按 JSON 解析;一个文件下载没有 Content-Disposition,浏览器可能直接预览。
七、常见误区与追问
- 误区:Header 都是可信的。 大多数请求头都可被客户端伪造,安全决策必须结合签名、会话或可信网关。
- 误区:Host 只是展示域名。 Host 直接影响虚拟主机路由和后端服务选择。
- 误区:Referer 一定存在。 隐私策略、跨协议跳转、直接访问都会导致 Referer 缺失或被裁剪。
- 追问:为什么 HTTP/1.1 要 Host? 因为同一 IP 可承载多个域名,服务器需要 Host 做虚拟主机路由。
- 追问:Set-Cookie 里 HttpOnly、Secure、SameSite 有什么用? 分别降低 JS 窃取、明文传输和跨站请求风险。
- 追问:如何传递链路追踪信息? 常用
traceparent、X-Request-Id或内部约定 Header,并在服务间透传。
八、加强记忆
HTTP Header 按功能分类记:路由看 Host,客户端信息看 User-Agent,来源看 Referer,认证看 Authorization/Cookie,缓存看 Cache-Control/ETag,重定向看 Location,安全看 CSP/HSTS/Set-Cookie 属性。这样答题不会散。