referrer
定义
HTTP来源地址(referer,或HTTP referer)是HTTP表头的一个字段,用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着HTTP来源地址,目前的网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。
via Wiki
各个场景下referrer
获取测试
测试代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
var referrer = document.referrer;
console.log(typeof referrer)
document.write(referrer)
</script>
</head>
<body>
</body>
</html>
场景 | Edge | IE11 | Firefox | Chrome | Safari |
---|---|---|---|---|---|
链接内打开 | |||||
直接在地址栏中输入A的地址 | × | × | × | × | ? |
从B页面用链接跳转到A页面 | √ | √ | √ | √ | ? |
从B页面用链接跳转到A页面(target="blank" )` |
√ | √ | √ | √ | ? |
form 表单提交 |
√ | √ | √ | √ | ? |
iframe [1] | |||||
iframe 中B页面链接跳转到A页面(target="_self" ) |
√ | √ | √ | √ | ? |
iframe 中B页面链接跳转到A页面(target="_top" ) |
√ | √ | √ | √ | ? |
iframe 中B页面链接跳转到A页面(target="_parent" ) |
√ | √ | √ | √ | ? |
鼠标操作 | |||||
从B页面鼠标中键打开A链接 | √ | √ | √ | √ | ? |
在B页面鼠标拖动链接A至地址栏 | × | × | × | × | ? |
使用浏览器的前进、后退按钮 | √ | √ | √ | √ | ? |
JavaScript操作 | |||||
使用window.location.href 打开A页面 |
√ | √ | √ | √ | ? |
使用window.open 打开页面 |
√ | √ | √ | √ | ? |
使用window.replace 打开页面 |
√ | √ | √ | √ | ? |
meta 配置 |
|||||
使用http-equiv 跳转A页面 |
× | × | × | √ | ? |
服务器端 | |||||
301 跳转1 |
√ | √ | √ | √ | ? |
302 跳转2 |
√ | √ | √ | √ | ? |
HTTP/HTTPS | |||||
HTTP 跳转HTTPS |
√ | √ | √ | √ | ? |
HTTPS 跳转HTTP |
× | × | × | √ | ? |
小结
不会产生 referrer
- 从收藏夹点击链接、浏览器自定义主页打开、在浏览器上手动输入地址、鼠标拖拽链接到地址栏打开
http-equiv
跳转 3- ‘HTTPS’向’HTTP’跳转
产生 referrer
a
链接跳转- 使用Javascript重定向:
location.href
location.replace()
window.open()
- 服务器端跳转
- ‘HTTP’向’HTTPS’跳转
老版本IE 问题
IE 下面window.location.href
不发送Referer
解决思路:
var url = 'http://www.phptpl.com/';
if(/MSIE (\d+\.\d+);/.test(navigator.userAgent) || /MSIE(\d+\.\d+);/.test(navigator.userAgent)){
var referLink = document.createElement('a');
referLink.href = url;
document.body.appendChild(referLink);
referLink.click();
}else{
location.href = url;
}
- 解决IE中javascript的location跳转获取不倒来源referer的方法
- IE 下面 window.location.href 不发送Referer
- 详解 JS 中的 document.referrer
- Difference between _self, _top, and _parent in the anchor tag target attribute
- 从获取 Referrer 的方法说起
- 多次重定向中http-referer的变化