http referer

11 篇文章 0 订阅
1 篇文章 0 订阅

 

今天同事问一个比较奇怪的问题。我们这边的项目中,有个地址,要单点到客户的系统中,具体什么不用做,只需要跳转到客户处理单点的一个链接就行,链接地址类似于这样: http://ip/ssoLogin.jsp...

我们的前端那就好做了呀,直接window.open(url),不就大功告成了么,这大概是我最近见过的最简单的一个需求了……

接下来问题就来了,同事加完之后发现,只要用window.open跳转过去的,必然会页面显示404,而跳转之后,在那个404页面当前页面一刷新,就成功连上成功单点了。

于是,,,接下来我们几个人进入了挠头的阶段,不知道从何定位。

开始怀疑是带过去的cookie问题,但是对比了404和成功的页面get请求,发现cookie是一样的。

然后就重头开始,仔细思考起了这个现象。从我们的系统跳转过去不行,从当前页刷新或者新开一个页签都行。对比请求头,找到了个参数——referer,直接页面中刷新进,是不会有referer这个参数的,从我们的系统进,就会带着我们系统的服务器地址。

查了下MDN:

Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

以上述推断,客户的这个ssoLogin,应该是对请求来源页做了什么处理。决定就从它下手,找什么办法可以跳过referer。

MDN中:

在以下两种情况下,Referer 不会被发送:

  • 来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;
  • 当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS)。

这个问题在IE里面没有出现,因为IE不会带上referer

我们试了下从其他来源查到的方法:

方法一(已试,有效):

这个大致是,location.replace也不会记录referer

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

方法二:

<meta name="referrer" content="never">

 方法三:

利用a标签的属性:rel

(摘自HTML standard

<!-- 这两种写法应该都可 -->
<a href="..." rel="noreferrer" target="_blank">
<a href="..." rel="noreferrer noopener" target="_blank">

这几种,第一种已测,其他两种待测,等下个fiddler测完再补充

 

 

贴上参考链接:

https://html.spec.whatwg.org/multipage/links.html#link-type-noreferrer

https://segmentfault.com/q/1010000000123441

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值