我在做跨域请求时老是被浏览器拦掉,控制台提示“Referrer Policy 限制了 referer 头”。试过在 meta 里加 <meta name="referrer" content="no-referrer-when-downgrade">,但好像没生效。
后端同事说他们没收到 Referer 字段,怀疑是我前端策略配错了。我其实不太清楚不同策略的具体影响,比如用 same-origin 或 strict-origin 会有什么区别?该怎么正确设置才能既安全又能正常传 Referer?
你说的 这个策略是默认的,它会在从 HTTPS 页面跳转到 HTTP 页面时不发送 Referer 头,其他时候都发送完整的 URL。如果你的请求没有被降级,理论上应该能发送的。
same-origin策略下,只有当请求同源时才会发送完整的 URL,跨域请求则不会发送 Referer。strict-origin策略和no-referrer-when-downgrade类似,但不管是不是降级都会去掉路径信息,只发送协议、主机和端口。为了确保安全同时又能正常传递 Referer,你可以试试
strict-origin-when-cross-origin。这个策略在同源请求时发送完整 URL,在跨域请求时只发送协议、主机和端口,这样既能保护隐私,又能给服务器提供有用的信息。在 HTML 中设置 Referrer Policy 可以用 标签,你已经试过了,如果没生效,可能是缓存问题,清除一下缓存再试。另外也可以在发起请求时通过 JavaScript 设置,比如:
这样应该可以解决你遇到的问题。如果还是不行,可能得检查一下服务器那边的 CORS 配置,确保允许接收 Referer 头。希望这能帮到你!