一、遇到的问题

当A网址页面跳转新界面打开B网站的静态资源时报404,

比如 http://www.A.com 页面有一个按钮,点击后会打开一个新页签请求B网站的一个文件https://www.B.com/test.txt 因为跳转时请求头携带了referer,导致B网站拦截,所以访问不到资源报404。而复制https://www.B.com/test.txt 粘贴到新页签就能正常打开。

二、原因

我们在从一个网站A点击链接进入另一个网站B页面时,浏览器会在header里加上Referer值,来标识这次访问的来源页面。而B网站对Referer进行了拦截导致。

三、提供三种解决方式

1、在A网站页面头部加入下面meta,所有跳转便不会携带referer

<meta name="referrer" content="no-referrer" />

拓展:
same-origin:
对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。
比如,www.AAA.com/page1.html 跳转到 www.AAA.com/page2.html 同源会携带 referrer,
www.AAA.com/page1.html 跳转到 www.BBB.com/page2.html 不同源不会携带 referrer,

<meta name="referrer" content="same-origin" />

除了可以设置 no-referrer 和 same-origin 其他 referrer 的设置值可参考:
Referrer-Policy
W3c-Referrer Policy
Remove http referer

2、使用window.open来去除referrer
如果是新页签打开:

window.open('javascript:window.name;','<script>location.replace("'+你的跳转url+'")<\/script>');

如果是新窗口打开:

window.open(你的跳转url, '_blank', 'noopener,noreferrer,resizable')

3、使用iframe

document.body.appendChild(document.createElement('iframe')).src='javascript:"<script>top.location.replace(\''+你的跳转url+'\')<\/script>"';

参考:
Remove http referer
Window.open()
关于 window.open() referer 非法请求的问题

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐