最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 不同浏览器版本关于referer的问题

    正文概述 掘金(余杭子曰)   2021-08-15   764

    背景

    微信的鉴权需要判断原域名为可校验的域名,而这一判断是通过跳转地址的referer来判断的,正常情况下浏览器会取当前页面的地址为其referer,我们可也可以通过修改document.referer来进行获取。

    但在chrome较高版本以及部分ua情况下,其策略发生了改变,在地址跳转时,不会再添加referer域名以外的参数。这样就会直接导致鉴权失败。

    在部分业务场景下,我们可能做了这样的判断,在code无效的情况下会发生302跳转,去重新鉴权,这样就会导致重复鉴权的死循环,问题更为严重。

    那么这个问题应该如何解决呢?

    referer的理解

    • document.referer : 链接
    • referer : 链接

    一句话描述:在跳转地址后,追加该字段可用来判断页面来源的字段,该字段不仅仅可用于页面跳转还可以用于资源类的请求。

    chrome高版本(85)带来的问题

    原本默认的 referer 策略(policy)是no-referrer-when-downgrade,即允许referer带上来源页面地址上的请求参数,Chrome85将策略修改为strict-origin-when-cross-origin,即如果请求地址与请求页面非同源,将只携带请求的域名,不会再带上来源页面地址的请求参数。

    那么为什么chrome要修改为这样的策略呢?增强隐私

    如何主动开启这个策略(低版本下)

    如果我们也有这个期望,那么我们可以如何主动开启呢 ?

    前端的设置:

    <meta name="referrer" content="strict-origin-when-cross-origin" />
    

    服务端的请求:

    Referer Policy: strict-origin-when-cross-origin

    如何关闭这个策略

    前端的设置:

    <meta name="referrer" content="no-referrer-when-downgrade"" /> 
    <!-- 对某个特定资源设置 referer 策略 --> 
    <img src="…" referrerpolicy="no-referrer-when-downgrade" />
    

    后端的设置:

    服务端将Referer Policy设置为no-referrer-when-downgrade

    回到问题

    我们需要将方案调整为关闭即可 。

    但如果直接设置为关闭,在低版本时会有相应的兼容问题 ,所以最终的技术方案如下 :

    1 低版本时不做处理

    2 chrome高版本,或者指定ua增加指定的meta标签

    具体代码如下:仅供参考 :

      <!-- 针对不同版本的内核,设置referrer属性 -->
        <script script type="text/javascript">
          var chromeVersionMatch = window.navigator.userAgent.match(/Chrome/(\d*)/);
          var version = chromeVersionMatch && chromeVersionMatch[1];
          if (version > 84) {
            var meta = document.createElement('meta');
            meta.content='no-referrer-when-downgrade';
            meta.name = 'referrer';
            document.getElementsByTagName('head')[0].appendChild(meta);
          }
        </script>
    

    更多

    因为这个策略暂时没有相应的语法可以直接判断,所以建议在相应的问题上进行数据跟踪,不断追加需要兼容的ua名单和版本。如果你有更好的方案欢迎联系我更新。


    下载网 » 不同浏览器版本关于referer的问题

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元