<返回更多

前端js中http跳转https报403错误,请求头referer详解

2023-02-01  今日头条  进击的程序猿
加入收藏

背景

前端js中http跳转https报403错误

window.open('https://xxx.xxx.xxx.xxx:1443')

报错403错误

 

 

 

 

但是在浏览器中直接输入https地址却是可以正常访问的。

问题解决

将服务器上网页内http跳转https的request header与浏览器直接访问https地址的request header对比,发现多了一个referer。问题应该就出现在这里,通过以下两种方式,实现网页内跳转不带referer,成功解决问题。

  1. window.open('JAVAscript:window.name;','<script>location.replace("https://xxx.xxx.xxx")</script>');
  2. window.open('https://xxx.xxx.xxx','_blank','noopener,noreferrer,resizable')

思考

1.为什么会出现跳转时携带referer?

我们在从一个网站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(''+你的

2. referer又是什么东西?

HTTP Referer 是 header 的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,用来表示从哪儿链接到当前的网页,服务器因此可以获得一些信息用于处理,采用的格式是 URL。

HTTP Referer 是 header 的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,用来表示从哪儿链接到当前的网页,服务器因此可以获得一些信息用于处理,采用的格式是 URL。

 

换句话说,借着 HTTP 来源地址,当前的网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。 而 dereferer 则是将 HTTP 来源地址信息剥离,所以网站将无法识别访客从何而来。

Referer 的正确英语拼法是 referrer。由于早期 HTTP 规范的拼写错误,为保持向下兼容就将错就错了。例如 DOM Level 2、Referrer Policy 等其他网络技术的规范曾试图修正此问题,使用正确拼法,导致当前拼法并不统一。

概念与功能

当访客访问网页时,HTTP 来源地址 (referer 或 referring page) 是前一个网页的 URL。如果是图片的话,通常指的就是图片所在的网页。在网页浏览器送往网页服务器的时候,HTTP 来源地址就被包含在 HTTP 请求方法中。

网站会将引用地址记录以便追踪用户的动态或进行统计,大部分分析软件也都会处理这个信息。但因引用地址信息可能会带来隐私权问题,不少网页浏览器允许用户设置不要提交这个信息,有些代理服务器和防火墙也会将引用地址信息过滤掉,以避免外部获知非公开的网络地址。缺少引用地址信息有可能会造成某些使用问题:某些服务器会因为缺少正确的引用地址信息而进行阻挡,以避免未经授权的图片引用(图像防盗链)或是其他对服务器有影响的行为。针对这样的阻挡,有些软件还提供了针对特定网站提交假来源地址的功能(反防盗链)。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>