使用方法の深い理解document.referrer

はじめに
JavaScriptでは、ドキュメントオブジェクトは、Webページと関連するプロパティのための3つの要求など、多くの属性を持っている、彼らはURL、ドメインおよびリファラです。
URL属性は、フルページのURLが含まれている、ドメイン属性は、ページのドメイン名のみが含まれ、その後、現在のページのURLのページにリファラプロパティのリンクを保存します。
最初の二つはよく理解し、参照元属性は、ページのURLに単純ですされています。まあ、それはこの特定のプロパティは何を使用ですか?
H5ページでは、私たちはしばしば次のような、頭の中で前のページに戻るには、ボタンを追加します:

 
image.png

前のページに戻ることができ、我々は、単純なJSコードを書くことができる要素の左側をクリックしてください:

var back = document.getElementById('back'); //假设该返回按钮元素id为back
back.onclick = function(){ history.back(); //返回上一个页面,也可以写成history.go(-1) }; // 或者 <a id="back" href="javascript:history.back();" rel="external nofollow" ></a> 

えっ?それはそんなに言う、またはそれとdocument.referrer何も言いませんでした!~~~その後、質問に来て、ちょうど伏線の前で、心配しない
ことがあり、上記のこの感覚は、基本的に戻る機能を実現していますが、考慮されていない場合は(我々はまだ少し厳しいプログラマーのものを持っている)があるが、ページの上ではなく、他のページを通じて他のユーザーと共有することがある場合は、それを入力するには?そして、歴史は歴史の中で、この時点でオブジェクトを存在しないため、任意の反応を持っていないボタンをクリックし、それが、これはあなたが最初のページを開くブラウザウィンドウのビューであると言うことです。
ユーザーエクスペリエンスを最適化するために、2つの解決策があるのが普通です。あなたが最初のページを開いたときに一つは、ボタンを戻る表示されず、他の生産要件のための右のプログラムを選択することができ、ウェブサイトのホームページに直接ジャンプするをクリックすることです。
これは、最初のオプションを選択することを想定している、我々は、セグメントJSを書くことができます。

if(document.referrer){
 back.style.display = 'block'; //默认让其隐藏,当referrer属性不为空时让其显示
}
//分享页 返回上一页 if (typeof document.referrer === '') { // 没有来源页面信息的时候,改成首页URL地址 $('.jsBack').attr('href', '/'); } 

実際には、リファラがhistory.lengthによって判断することができますも、この属性を決定するために複数の方法でも、ページを開き始め、現在のページがユーザーであるかどうかの方法を決定するためにゼロです。
ブラウザのサポートのために:

 
image.png

关于HTTPS请求
如果在一张普通的HTTP页面上点击了HTTPS的链接,那么在https请求头部可以附上Referer信息,之后在HTTPS页面中依然可以用document.referre来获得普通的http页面。

同样,如果是在一张https页面上点击了另一个HTTPS的链接,可以在请求的头部附上Referer信息。

但是如果是从一张https页面点击了http链接,那么很不幸,发送的http请求头里无法包含关于https页面的信息,这可能是出于一种对https页面的保护措施。
伪造Referer信息
根据上文的描述,document.referre源自于Header中的Referer。那么如果想修改document.referre的值,理论上讲,仅需要修改请求Header。可以将Header中现有的Referer替换成自己想要的值,如果原来没有也可以添加Referer。

在客户端,篡改Header是一件非常容易的事情。在一个页面的http请求发出去之前,可以利用截包工具将其拦截,然后分析出头部信息,并且修改Referre。

搜了一下,对于FireFox可以使用RefControl插件方便的进行修改。总之,欺骗Traffic source是轻而易举的事情。

页面强制Refresh

<meta http-equiv="Refresh" content="5;URL=a.html"> 

则过5秒后浏览器会自动向server发起a页面请求。

经过测试,在IE8,FF3.6-FF4.0中,均不会带有Referer信息,但是chrome却能够鬼使神差的把b.html作为Referer添加进头部。
几种意外丢失情况:
1,直接在浏览器中输入地址
2,使用location.reload()刷新(location.href或者location.replace()刷新有信息)
3,在微信对话框中,点击进入微信自身浏览器,
4,扫码进入微信或QQ的浏览器
5,直接新窗口打开一个页面
6,从https的网站直接进入一个http协议的网站(Chrome下亲测),
7.a标签设置rel="noreferrer"(兼容IE7+)
8,meta标签来控制不让浏览器发送referer
9,点击 flash 内部链接
10,Chrome4.0以下,IE 5.5+以下返回空的字符串,使用 修改 Location 进行页面导航的方法,会导致在IE下丢失 referrer,这可能是IE的一个BUG
11,跨域
12,iframe隐藏

结论:如果你需要通过 document.referrer 采集页面访问来源,最好不要使用 JS 跳转或打开新窗口,也不要使用 meta 跳转。
referrer 的作用:
1,统计来源,可以统计数量,可以拒绝访问
2,返回上一页逻辑判断

 

おすすめ

転載: www.cnblogs.com/cangqinglang/p/11323380.html