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优化
相关推荐
怕浪猫4 小时前
FDE 如何正确解决现场项目工程性的问题
前端·后端·ai编程
西瓜太郎12344 小时前
外层模型卡片与分组详情成功率不一致,应该怎么排查?
前端·typescript·go·软件工程·react
GreenTea4 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
考虑考虑4 小时前
Java实现hmacsha256加密算法
java·后端·java ee
凤山老林5 小时前
聊聊企业级 API 安全:Spring Boot 落地 OAuth 2.1、mTLS 与接口签名防篡改
spring boot·后端·安全·oauth
林鹿6 小时前
maven属性与groovy变量对照表
后端
烽火戏诸诸诸侯6 小时前
AI 让我的独门小工具焕发第二春
后端·ai编程·vibecoding
狼爷7 小时前
硅谷爆火的FDE是AI新风口,还是高级外包?
后端·全栈
几何心凉7 小时前
没有万能模型:我用 AiiOnly Token Plan,把多款大模型的长处拼进同一个项目
前端
kyriewen7 小时前
Claude Code 的额度今天缩水了17%——官方公告上写的是"永久提高25%"
前端·ai编程·claude