前端请求被拦截,Referrer Policy 到底该怎么配?

欧阳亚会 阅读 12

我在做跨域请求时老是被浏览器拦掉,控制台提示“Referrer Policy 限制了 referer 头”。试过在 meta 里加 <meta name="referrer" content="no-referrer-when-downgrade">,但好像没生效。

后端同事说他们没收到 Referer 字段,怀疑是我前端策略配错了。我其实不太清楚不同策略的具体影响,比如用 same-originstrict-origin 会有什么区别?该怎么正确设置才能既安全又能正常传 Referer?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
百里玉娅
我之前也碰到过类似的问题。Referrer Policy 确实有点让人头疼,不过理解了原理就还好说。这个头信息主要是用来告诉服务器请求是从哪儿来的,对于跨域请求尤其重要。

你说的 这个策略是默认的,它会在从 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 设置,比如:

fetch('https://example.com/api', {
method: 'GET',
referrerPolicy: 'strict-origin-when-cross-origin'
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));


这样应该可以解决你遇到的问题。如果还是不行,可能得检查一下服务器那边的 CORS 配置,确保允许接收 Referer 头。希望这能帮到你!
点赞
2026-03-25 15:00