no-referrer-when-downgrade是Referrer-Policy默认行为,指HTTPS→HTTP降级时不发Referer,其余情况(如HTTPS→HTTPS)仍发完整URL;它仅能通过HTTP响应头设置,<meta name="referrer">不支持该值,否则无效。

什么是 referrer 的 no-referrer-when-downgrade 行为
这个值是 Referrer-Policy 的默认行为(现代浏览器中),意思是:当从 HTTPS 页面跳转到 HTTP 页面时,不发送 Referer 头;其他情况(如 HTTPS→HTTPS、HTTP→HTTP)则正常发送完整来源信息。它不是完全禁用 referrer,而是做安全降级保护。
在 HTML 中用 <meta> 设置 referrer 策略的正确写法
<meta> 标签只能通过 name="referrer" 属性设置,且只支持三个值:no-referrer、origin、unsafe-url —— 不支持 no-referrer-when-downgrade。
这意味着:
-
<meta name="referrer" content="no-referrer-when-downgrade">是无效的,浏览器会忽略它 - 该策略只能通过 HTTP 响应头
Referrer-Policy: no-referrer-when-downgrade设置 - 如果必须用前端控制,可改用
<meta name="referrer" content="no-referrer">(但这是更激进的全禁用)
为什么不能用 <meta> 设置 no-referrer-when-downgrade
W3C 规范明确限制了 <meta name="referrer"> 的取值范围,仅兼容旧式简单策略。而 no-referrer-when-downgrade 属于 Referrer Policy Level 2 标准,要求服务端注入响应头或使用 <meta http-equiv="Referrer-Policy">(注意属性名不同)。
立即学习“前端免费学习笔记(深入)”;
可行替代方案:
- 用
<meta http-equiv="Referrer-Policy" content="no-referrer-when-downgrade">—— 这是合法的,但兼容性略差(IE 不支持,Chrome 61+、Firefox 64+ 支持) - 更稳妥的做法:在 Web 服务器(Nginx/Apache)或后端代码中设置响应头
Referrer-Policy: no-referrer-when-downgrade - 若用 JavaScript 动态跳转,可配合
rel="noreferrer"(仅对<a>和window.open生效)
常见错误现象和验证方式
直接写 <meta name="referrer" content="no-referrer-when-downgrade"> 后,打开 DevTools → Network → 点击请求 → 查看 Request Headers → Referer 字段依然存在(尤其 HTTPS→HTTP 跳转时未被清除),就说明策略未生效。
验证是否成功:
- 访问一个 HTTPS 页面,点击链接跳转到 HTTP 页面
- 检查目标页面的请求头中是否缺失
Referer - 用 curl 测试:
curl -I https://yoursite.com,确认响应头含Referrer-Policy: no-referrer-when-downgrade
真正起作用的是响应头,不是 <meta name="referrer">。这点容易被忽略,导致调试半天发现 meta 白写了。



















