referrerPolicy大小写敏感性在Firefox vs Chrome差异?并不只看表面做法,关键还要理解相关条件、限制和后续影响。
referrerPolicy 属性值大小写敏感,必须严格使用规范定义的7个全小写短横线分隔值,如"no-referrer";HTML中属性名为referrerpolicy(全小写),JS中DOM属性为referrerPolicy(驼峰)。
大小写敏感,所有主流浏览器都严格按规范匹配 referrerPolicy 值,不支持驼峰、全大写或缩写。比如 "no-referrer" 有效,但 "No-Referrer"、"NO_REFERRER" 或 "noreferer" 在 Firefox 和 Chrome 中均被忽略,退化为默认策略(通常是 "strict-origin-when-cross-origin")。
两者行为一致:遇到无效值时均静默降级,不报错也不警告,但降级目标略有不同:
"strict-origin-when-cross-origin"
"no-referrer-when-downgrade"(旧版默认,仍沿用)这意味着同一段写错的代码(如 referrerpolicy="none")在两个浏览器中实际生效的 referrer 行为可能不同——Chrome 发送 origin,Firefox 可能不发任何 referrer(取决于协议和目标站点)。务必校验拼写,不能依赖“差不多就行”。
只使用规范定义的 7 个全小写短横线分隔值,其他变体均不可靠:
"no-referrer""no-referrer-when-downgrade""origin""origin-when-cross-origin""same-origin""strict-origin""strict-origin-when-cross-origin"注意:"unsafe-url" 虽然合法,但会泄露路径和参数,仅限可信上下文;"origin-when-cross-origin" 是现代推荐的平衡选择,Chrome/Firefox 均支持无差异。
HTML 属性名是 referrerpolicy(全小写),而 JS DOM 属性是 referrerPolicy(驼峰):
<a href="https://example.com" referrerpolicy="no-referrer">link</a>
JS 中必须用驼峰:
el.referrerPolicy = "no-referrer"; // ✅ 正确<br>el.setAttribute("referrerpolicy", "no-referrer"); // ✅ 也可,但属性名仍是小写
常见错误是 HTML 里写成 referrerPolicy(带大写 P),这会被浏览器当无效属性忽略;JS 里误用 referrerpolicy(全小写)则报 undefined ——大小写在这里是硬性契约,不是风格偏好。