一、基础定义
Referer 是 HTTP 请求头 中的一个字段,作用是告诉服务器:当前这个请求,是从哪个网页 / URL 发起的。
关键坑点:拼写错误
- 正确英文单词:
Referrer(两个 r) - HTTP 标准里:
Referer(一个 r)这是历史拼写错误,永久无法修改,所有协议、代码、报文里都必须写一个 r。
二、核心规则:请求从哪来,Referer 就是谁
一句话铁律 :当前请求在哪个页面执行,Referer 就填哪个页面的 URL,和请求访问的目标地址无关。
你的经典场景
-
页面所在网站:网站 B (
https://b.com/index.html) -
页面里嵌入请求:访问 网站 A 的资源(
https://a.com/script.js) -
最终请求头: http
Referer: https://b.com/index.html
结论:Referer 只看「发起请求的页面」,不看「请求访问的目标」
三、什么时候会带 Referer?(浏览器自动添加)
只要请求是从网页里主动触发的,浏览器就会自动带上 Referer:
- 点击页面链接跳转
- 加载
<script><img><link>标签资源 - AJAX / Fetch 接口请求
- 表单提交
四、什么时候没有 Referer?
- 直接在地址栏输入 URL 访问
- 从书签 / 收藏夹打开页面
- 从 HTTPS 网站 → 跳转到 HTTP 网站(安全降级,浏览器自动删除)
- 浏览器隐私模式 / 插件屏蔽
- 服务器设置了
Referrer-Policy禁止发送 - 第三方工具、爬虫、代码手动发请求(可不带 / 伪造)
五、Referer 三大核心作用(必考)
1. 流量统计(网站分析)
统计网站流量来源:
- 从百度 / 谷歌搜索来的
- 从其他网站跳转来的
- 直接输入地址来的工具:百度统计、Google Analytics 全靠 Referer 分析来源。
2. 防盗链(Anti-hotlinking)------ 最常用、最重要
防止其他网站白嫖你的服务器资源(图片、JS、视频、音频)。
- 正常:自己网站(A)请求自己资源 → Referer=A → 允许
- 盗链:别人网站(B)嵌入你的资源 → Referer=B → 拒绝(403 Forbidden)
这就是你在 B 网站嵌 A 的 JS 会失效的根本原因。
3. 安全防护:CSRF 攻击防御
校验请求来源是否为本站页面,防止跨站伪造请求攻击。例:支付接口只允许 Referer=自己网站 的请求。
六、Referrer-Policy(控制 Referer 发送规则)
用来保护隐私,避免 Referer 泄露页面路径 / 敏感参数,常用策略:
- no-referrer:完全不发送 Referer
- origin :只发域名(
https://b.com),不发完整路径 - same-origin:同域发完整 URL,跨域不发
- strict-origin-when-cross-origin (默认推荐):
- 同域:完整 URL
- 跨域:只发域名
- HTTPS→HTTP:不发
设置方式:
html
预览
<meta name="referrer" content="strict-origin-when-cross-origin">
七、Referer 重要弱点
- 可被伪造爬虫、代码、抓包工具可以随意修改 Referer,冒充合法来源。
- 可被屏蔽浏览器、插件、隐私模式可直接删除 Referer。
→ 结论:Referer 只能做基础校验,不能做绝对安全校验。