详谈javascript中document.referrer的兼容性

遇见了,却来不及相识;相识了,却来不及熟悉;熟悉了,却还是要说再见。既然每天都见面,为何不提前熟悉一下呢?

  读书是为了明理,我们还是带着问题来了解referrer的重要性和用途吧!

一:什么是referrer?

  1. referrer中文意思是:来源,推荐人。网络意义是指网站的来路,又称“来源”,HTTPReferrer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上referrer,告诉服务器用户从哪个页面链接过来的,服务器可以获得referrer的信息用于加工处理。比如:我从我的页面连接到朋友的页面,我朋友的服务器就能够从 HTTP Referer中统计出每天有多少个用户点击我主页上的链接访问他的网站。(注意:Referer其实应该是英文单词Referrer,编写http标准的人也就将错就错了。所以嘛,要敢于向权威质疑)。
   2. 因为referrer可能是私有的信息,或者可能泄露其他私有的信息来源,所以,建议用户选择是否发送reffer域。例如:浏览器客户端可能有切换选项来公开、匿名浏览,发送refererfrom信息。如果通过安全协议传输,客户端不应该在http请求中包括referer域。
   3. referrer有时候也被用作防盗链(即下载网页资源的时候判断源地址是不是在网站域名之内,否则就不能下载或者显示),比如CSDN都是通过Referer页面来判断用户是否能够下载代码或者资源。
   4. 当然,对于某些黑客可能伪造Referer来获得某些权限,在设计网站时一定需要考虑到这个问题。但是对于浏览器来说,以下情况是不会发送Referer,因为可能有潜在的安全问题:
  * 用户手动输入网址或是从收藏夹中访问
  * 对https等加密协议是不带Referrer的。
   5. 处于以上等各种原因,有时候我们通过javascript中document.referrer获取不到来源,下面总结一下我们开发过程中碰到的丢失Referrer的情况。

二: 模拟丢失Referrer的现象?

首先我们写个公用的test代码,test.html页面的代码是:


<html>
    <head>
        <meta charset="UTF-8">
        <title>title> 
    head>
    <body>
        欢迎来到test页面
    body>
    <script>
        alert('来源是:'+ document.referrer);
    script>
html>

  1. window.open方式打开新窗口

//方法一:直接用window.open()跳转在ie6,7,8 11丢失Referrer ,在edge,opera、chrome、Firefox都能拿到Referrer,看来用window.open()直接,去来源对于新一代浏览器都不适用。
    window.open('test.html');//

下面是用windows.open()里面的内容进行间接跳转,都是精心测试的结果:

        var url = 'http://localhost/04interesting/11js/05js-Internet/01referer/all/test.html';

        //方法二:window.location.href在每个浏览器都可以获取referrer
       window.location.href = 'test.html';

        //方法三:opera,chrome,edge,ie11,qq,uc,丢失referrer,但是Firefox不丢失,ie6无法跳转
        window.open('javascript:window.name;','
                    
                    

你可能感兴趣的:(javascript,浏览器兼容性,js与SEO)