referrerpolicy属性仅控制Referer请求头中URL信息的裁剪,必须加在发起请求的HTML标签上(如、、、、、),局部设置优先级高于或响应头;strict-origin-when-cross-origin比默认no-referrer-when-downgrade更安全,因跨源时只发origin而非完整URL,防止敏感参数泄露。

referrerpolicy 属性不是用来“控制元数据泄露”的泛称工具,它只管一件事:浏览器在发起请求时,往 Referer 请求头里塞多少 URL 信息。它不处理其他元数据(如 User-Agent、Sec-Fetch-*、cookies 或 JS 上下文),也不加密或过滤内容——只是裁剪 URL。
referrerpolicy 应该加在哪些 HTML 标签上?
它必须加在实际发起网络请求的标签上,不是全局声明:
-
<a></a>:用户点击跳转时生效(但右键“在新标签页打开”会绕过它,除非同时加rel="noreferrer") -
<img alt="HTML属性Referred-policy:控制引用来源元数据泄露的隐私属性" >、<script></script>、<link>(含rel="preload")、<iframe></iframe>:资源加载时生效 -
<form></form>:表单提交时生效(注意:仅影响 GET/POST 导航,不影响fetch())
<meta name="referrer" content="..."> 只影响后续导航类行为(a 点击、form 提交),对 JS 动态创建的 <img alt="HTML属性Referred-policy:控制引用来源元数据泄露的隐私属性" >、fetch()、XMLHttpRequest 完全无效。
strict-origin-when-cross-origin 为什么比默认值更安全?
默认值 no-referrer-when-downgrade 在 HTTPS → HTTPS 跨域时会发送完整 URL(含路径和查询参数),极易泄露敏感信息:
立即学习“前端免费学习笔记(深入)”;
- 从
<a href="https://www.php.cn/link/83d5aac46c097426773520489cda201c">https://www.php.cn/link/83d5aac46c097426773520489cda201c</a>跳到<a href="https://www.php.cn/link/67eed99b828e1b94f5b53bce9e400a17">https://www.php.cn/link/67eed99b828e1b94f5b53bce9e400a17</a>,对方收到的Referer是完整带参 URL - 而
strict-origin-when-cross-origin在同样场景下只发<a href="https://www.php.cn/link/87984ef92f4eb26a3400598e2fe21c19">https://www.php.cn/link/87984ef92f4eb26a3400598e2fe21c19</a>
关键差异点:
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 同源请求:两者都发完整 URL
- 跨源请求:
no-referrer-when-downgrade发完整 URL(只要目标是 HTTPS);strict-origin-when-cross-origin只发 origin(协议+域名+端口) - 协议降级(HTTPS → HTTP):两者都不发 Referer
所以,只要涉及跨域跳转,尤其含 query 参数的页面,就该显式设为 strict-origin-when-cross-origin。
rel="noreferrer" 比 referrerpolicy="no-referrer" 更彻底
两者都清 Referer,但区别明显:
-
referrerpolicy="no-referrer":只清 Referer 头,window.opener仍可被新开页访问(存在反向控制风险) -
rel="noreferrer":自动附带noopener行为,切断window.opener引用,防钓鱼与 XSS 扩展攻击
实际写法应为:
<a href="https://thirdparty.com" rel="noreferrer" target="_blank">跳转</a>
注意:如果只写 rel="noreferrer" 而没写 target="_blank",noopener 不生效(浏览器忽略)。
referrerpolicy 是个局部开关,它不替代后端响应头 Referrer-Policy,也不能覆盖 JS 发起的请求。真正要堵住 Referer 泄露,得三层配合:后端统一配响应头 + 关键外链加 rel="noreferrer" + 敏感资源标签显式设策略。漏掉任何一层,都可能让一个 query 参数悄悄溜出去。


















