HTTP 请求头 Headers 完整详解

一、基础概念

HTTP 请求头(Request Headers)是客户端(浏览器、Postman、程序)发给服务器时,附带在请求体前的键值对,用来告诉服务器:客户端环境、身份、资源需求、权限、缓存、跨域、跳转来源等信息。 格式:Key: Value,每行一个,请求头与请求体空行分隔。

分类:

  1. 标准通用头:请求、响应都能用(Cache-Control、Referrer-Policy)
  2. 请求专属头:仅客户端发给服务端(User-Agent、Cookie、Referer)
  3. 实体头:描述请求体数据(Content-Type、Content-Length)
  4. 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

作用:客户端存储的会话、登录、个性化数据,每次请求自动携带。 示例:

ini 复制代码
Cookie: sid=abc123; userid=10086; theme=dark

配套:服务端用 Set-Cookie 写入客户端;IIS/Nginx/.NET全平台依赖Cookie做登录会话。

Authorization

接口鉴权核心头,传递登录凭证,无Cookie场景使用(前后端分离、API接口) 两种主流格式:

  1. Bearer Token(JWT 最常用)
makefile 复制代码
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  1. 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/上传),描述请求体数据格式 常用值:

  1. application/json 前后端分离接口JSON传参(90%接口使用)
  2. application/x-www-form-urlencoded 普通表单提交
  3. multipart/form-data 文件上传、带文件表单
  4. 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。


四、请求头常见问题

  1. 跨域报错:自定义Token头、POST请求触发OPTIONS预检,服务器未配置允许头/域名
  2. 后端拿不到真实IP:前端有Nginx/CDN,未传递X-Forwarded-For
  3. 接口接收不到JSON参数 :忘记加 Content-Type: application/json
  4. 防盗链失效:Referrer-Policy设置为no-referrer,请求不带Referer
  5. 缓存不生效:缺少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优化
相关推荐
wangruofeng5 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
脚本自动化开发5 小时前
玩影之刃零,两张四千元级显卡怎么挑
后端
wangruofeng5 小时前
给前端开发者的 100 个设计参考网站
前端·设计
星栈8 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技8 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569158 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
努力的小雨9 小时前
别再复制日志给AI了!我让Codex自己去观测云查报错
后端
风骏时光牛马10 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng11 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
afumu11 小时前
Go 写一个只监听 127.0.0.1 的控制服务:鉴权、白名单、危险命令拦截
后端·安全·go