一、基础概念
HTTP 请求头(Request Headers)是客户端(浏览器、Postman、程序)发给服务器时,附带在请求体前的键值对,用来告诉服务器:客户端环境、身份、资源需求、权限、缓存、跨域、跳转来源等信息。 格式:Key: Value,每行一个,请求头与请求体空行分隔。
分类:
- 标准通用头:请求、响应都能用(Cache-Control、Referrer-Policy)
- 请求专属头:仅客户端发给服务端(User-Agent、Cookie、Referer)
- 实体头:描述请求体数据(Content-Type、Content-Length)
- CORS跨域专用头:跨域校验(Origin、Access-Control-Request-Method)
二、高频必懂请求头(生产最常用)
1. 身份与客户端标识类
User-Agent
作用:告诉服务器客户端是什么设备、浏览器、系统、爬虫。 示例:
css
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36
用途:
- 后台区分PC/手机/爬虫,返回适配页面
- 反爬:拦截空UA、异常爬虫UA
Cookie
作用:客户端存储的会话、登录、个性化数据,每次请求自动携带。 示例:
ini
Cookie: sid=abc123; userid=10086; theme=dark
配套:服务端用 Set-Cookie 写入客户端;IIS/Nginx/.NET全平台依赖Cookie做登录会话。
Authorization
接口鉴权核心头,传递登录凭证,无Cookie场景使用(前后端分离、API接口) 两种主流格式:
- Bearer Token(JWT 最常用)
makefile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- Basic 基础认证(账号密码Base64加密)
makefile
Authorization: Basic YWRtaW46MTIzNDU2
2. 资源协商、内容类型类
Accept
告诉服务器:客户端能接收什么格式的响应数据,优先级逗号分隔。 示例:
bash
Accept: text/html,application/json;q=0.9,*/*;q=0.8
含义:优先返回HTML,其次JSON,其他格式兜底。
Accept-Encoding
客户端支持的压缩算法,服务器会按此压缩返回内容(大幅减少带宽)
makefile
Accept-Encoding: gzip, deflate, br
配套:响应头 Content-Encoding: gzip Nginx/IIS 都可开启gzip压缩,依赖这个请求头判断。
Accept-Language
客户端系统语言,服务器返回对应多语言页面
css
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Content-Type
有请求体时必须携带(POST/PUT/上传),描述请求体数据格式 常用值:
application/json前后端分离接口JSON传参(90%接口使用)application/x-www-form-urlencoded普通表单提交multipart/form-data文件上传、带文件表单text/plain纯文本
Content-Length
请求体字节长度,自动由浏览器/框架生成,服务端判断数据完整性。
3. 缓存控制类(优化重复请求性能)
If-Modified-Since
客户端带上上次资源修改时间,服务器对比:
- 资源未更新:返回
304 Not Modified,不返回数据,走本地缓存 - 资源更新:返回200+新内容
If-None-Match
携带ETag标识(资源唯一指纹),比时间判断更精准,优先使用。
Cache-Control
客户端强制缓存策略
yaml
Cache-Control: no-cache # 每次必须校验服务器是否更新
Cache-Control: max-age=3600 # 1小时内不请求服务器,直接读本地缓存
4. 跳转、来源、隐私类(上文Referrer-Policy配套)
Referer
记录当前请求从哪个页面跳转而来(防盗链、访问统计)
bash
Referer: shturl.cc/vZJZsNT6jtNqBw
配合 Referrer-Policy 控制是否发送、发送完整路径/仅域名。
Referrer-Policy
客户端侧策略,和服务端响应头作用一致,单独控制当前请求Referer粒度。
5. 跨域 CORS 请求专用头(前后端分离核心)
Origin
跨域请求必带,告诉服务器请求来源域名;同域请求浏览器不会自动携带。 示例:Origin: shturl.cc/YDVakW5aY8g 服务器校验Origin,允许则返回 Access-Control-Allow-Origin。
Access-Control-Request-Method
预检OPTIONS请求专用,告诉服务器实际要用的请求方法(POST/PUT/DELETE)
Access-Control-Request-Headers
预检请求,告知服务器自定义请求头(如Token)
6. 连接、代理、真实IP类(服务器运维必备)
Host
必填头!指定访问的域名,一台服务器绑定多站点靠Host区分网站(IIS/Nginx站点绑定核心)
makefile
Host: www.baidu.com
X-Forwarded-For(XFF)
反向代理场景(Nginx前置、CDN)传递用户真实IP 架构:用户 → CDN/Nginx → IIS/.NET服务 IIS后端读取XFF才能拿到真实访客IP,否则只能获取代理IP。 格式:X-Forwarded-For: 110.xx.xx.xx
X-Real-IP
Nginx单独配置传递真实客户端IP,简化XFF读取。
Connection
控制TCP连接复用
yaml
Connection: keep-alive # 保持连接,多次请求复用TCP,性能更好
Connection: close # 请求完成立即断开连接
7. 安全、防攻击请求头
X-Requested-With
区分AJAX异步请求还是页面直接访问 常见值:XMLHttpRequest 后端可通过该头判断是否为接口异步调用。
Sec-Fetch-* 系列(现代浏览器自动添加)
浏览器安全防护,区分请求类型,防御CSRF、恶意跳转
- Sec-Fetch-Mode: cors 跨域接口
- Sec-Fetch-Site: same-site 同站点 / cross-site 跨站
DNT: 1
Do Not Track,告诉网站不要追踪用户行为(大部分网站不生效)
三、IIS / Nginx 场景实操区别
1. 读取自定义请求头
- Nginx:
$http_xxx读取,如$http_authorization - IIS (.NET):
Request.Headers["Authorization"]获取所有头
2. 自定义全局请求头拦截/添加
- Nginx:
proxy_set_header转发上游、if判断拦截非法Header - IIS:web.config + URL重写模块 过滤、新增请求头
3. 反向代理IP头处理
Nginx必须手动配置 proxy_set_header X-Forwarded-For $remote_addr; IIS需安装URL重写模块,解析XFF获取真实客户端IP。
四、请求头常见问题
- 跨域报错:自定义Token头、POST请求触发OPTIONS预检,服务器未配置允许头/域名
- 后端拿不到真实IP:前端有Nginx/CDN,未传递X-Forwarded-For
- 接口接收不到JSON参数 :忘记加
Content-Type: application/json - 防盗链失效:Referrer-Policy设置为no-referrer,请求不带Referer
- 缓存不生效:缺少If-None-Match、Cache-Control配置错误
五、极简速查表
| 请求头 | 核心用途 |
|---|---|
| Host | 区分服务器多站点,必填 |
| User-Agent | 识别浏览器/设备/爬虫 |
| Cookie | 会话、登录状态存储 |
| Authorization | API接口鉴权Token |
| Content-Type | POST请求数据格式 |
| Accept | 服务器返回什么格式数据 |
| Referer | 来源页面,防盗链统计 |
| Origin | 跨域请求来源域名 |
| X-Forwarded-For | 代理场景真实用户IP |
| Accept-Encoding | 开启gzip压缩 |
| If-None-Match | 资源缓存304优化 |