如何让浏览器在访问链接时不要带上referer

我们在从一个网站点击链接进入另一个页面时,浏览器会在header里加上Referer值,来标识这次访问的来源页面。但是这种标识有可能会泄漏用户的隐私,有时候我不想让其他人知道我是从哪里点击进来的,能否有手段可以让浏览器不要发送Referer呢?

我试过用window.location.href='...'来跳转,也还是有Referer。大家有什么好办法吗?

阅读 65.2k
7 个回答
function open_without_referrer(link){
document.body.appendChild(document.createElement('iframe')).src='javascript:"<script>top.location.replace(\''+link+'\')<\/script>"';
}

如果如果是新窗口打开,可以使用如下代码:

function open_new_window(full_link){ 
    window.open('javascript:window.name;', '<script>location.replace("'+full_link+'")<\/script>');
 }

基于HTML标准,可以在a标签内使用rel="noreferrer"来达到这一目的。
目前大部分基于Webkit的浏览器已经支持
提供跨浏览器支持的更好的办法是使用一个第三方的库noreferrer.js,它可以自动识别浏览器并选择最优方案。

补充
Opera并没有提供可以实现不发送referrer的方法,noreferrer.js的解决方案是利用google的url中转。在国内的网络环境下,你懂的。。。
可以自己搭建一个跳转的页面,或者用其他站点的url跳转接口。

<meta name="referrer" content="never"> <!-- 没写错 -->

注意:不带Referer头的话,百度统计js会拒绝返回正常内容。

有个折中的办法

// 例子, 比如index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>转向例子</title>
    <style type="text/css">
    #example, iframe.hidden {
        display:none;
    }
    </style>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <script type="text/javascript">
    $().ready(function(){
        $("#example").show();
        $(document.body).on('click', 'a[rel~="hide_ref"]',function(){
            var url = '/redirect.html#!'+ encodeURI(this.href);
            $('<iframe class="hidden" src="'+url+'"></iframe>').appendTo($(document.body));
            return false;
        });
    });
    </script>
</head>
<body>
    <div id="example">
    <h1>正常链接</h1>
    <a href="http://www4.ncsu.edu/~awwatkin/SHTML/dump.shtml">http://www4.ncsu.edu/~awwatkin/SHTML/dump.shtml</a>
    
    <h1>隐藏referer</h1>
    <a href="http://www4.ncsu.edu/~awwatkin/SHTML/dump.shtml" rel="hide_ref">http://www4.ncsu.edu/~awwatkin/SHTML/dump.shtml</a>
    
    </div>
</body>
</html>

// 这个是中间文件, redirect.html

<script type="text/javascript">
var hash = location.hash;
location.hash = '';
if(hash.substring(0,2)==='#!') {
    var url = decodeURI(hash.substring(2));
    top.location.href = url;    
}

</script>

这样只要点击rel里带hide_ref里链接, 都会生成一个iframe, iframe里读取location.hash(再重置), 然后top.location.href做转向, 无论从哪个地址点过去, 都是那个iframe的url

今天看查看blog refer的时候,发现很多的是来自跳转页的,所以觉得LZ的解决方法可以跟google学学,弄一个跳转页,这样别人只知道是从一个跳转页过来的,不知道具体是那个网页了。。

提供一个技巧:
在 Chrome 浏览器中开一个 隐身窗口 访问你需要访问的地址。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏