这篇文章是15年写的,觉得有点意思搬过来

大家都知道当我们从某一个A网页上点击超链接进入B页面,此时B页面的 Request Header 中将有一个 Referer 字段,它保存的 是A页面的链接地址。这样B页面就知道这个访问这是从哪里来到我这的。

有时候我们不不想要B页面知道用户从哪来,那咋办啦?这里提供三个方法:

方案一

这个方案最简单,在你的a标签上增加rel="noreferrer"属性,目前大部分Webkit的浏览器已经支持

<a href='http://www.domain.com' rel="noreferrer">open me</a>

方案二

使用 JavaScript 实现

<script>
  function self_open(url){
    var o = document.createElement('iframe');
    o.setAttribute('style', 'display:none');
    o.setAttribute('src', 'javascript:"<script>top.location.replace(\''+ url +'\')<\/script>"')
    document.body.appendChild(o);
  }
  function new_window_open(url){
    window.open('javascript:window.name;', '<script>location.replace("'+ url +'")<\/script>');
  }
</script>
<a href='javascript:self_open("http://www.domain.com")'>open</a>
<a href='javascript:new_window_open("http://www.domain.com")'>open</a>

方案三

利用了base64的特性,用后端代码协助实现,所以对浏览器没有限制。这里以PHP来做示例

function go($url) {
  $base64Str = sprintf('<script>document.write("<meta http-equiv=\"refresh\" content=\"0;url=%s\"/>");</script>', $url);
  $base64Data = 'data:text/html;base64,' . base64_encode($base64Str);
  echo sprintf('<script>document.write("<meta http-equiv=\"refresh\" content=\"0;url=%s\"/>");</script>', $base64Data);
}

go('http://www.domain.com');