分類  >  Web前端 >

http協議中Referer的功用和容易丟失的幾個原因

tags:    時間:2013-12-09 23:38:56
http協議中Referer的作用和容易丟失的幾個原因

前段時間做一個功能,利用到了Referer來做界面間數據的傳遞,測試期間發現Referer很容易丟失,總結一下給大家分享下。

 

什麼是HTTP Referer

簡言之,HTTP Referer是header的一部分,當瀏覽器向web伺服器發送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面鏈接過來的,伺服器籍此可以獲得一些信息用於處理。Referer其實應該是英文單詞Referrer,不過拼錯的人太多了,所以編寫標準的人也就將錯就錯了。

我們通過HttpWatch也可以看到每次請求的Header中,基本上都是Referer值,值就是當前界面的url

 

容易丟失的原因

1、IE6、7下使用window.location.href=url進行界面的跳轉

    一般都是在當前窗口內進行新增、修改、查看操作,也有一些是刪除操作,更有極少是查詢操作。

    建議查詢時,如果條件較少,可以用get的方式提交form。條件較多還是post方式吧,不然IE6、7的url長度又超長了

    其他操作可以寫一個公共的跳轉方法,模仿超鏈接的形式在當前窗口打開。

2、IE6、7下使用window.open

     同上一種情況,能使用模仿超鏈接(target=_blank)的形式打開,就用超鏈接吧,不行的話,也沒辦法了

3、Tab頁框架打開方式

    一般使用Tab頁框架的,tab頁的打開方式都是在父界面或頂層界面中執行js方法來控制tab頁。這是Referer就成了執行js方法所在的界面,也就是父界面或頂層界面。

以下是其他場景也會丟失,從網上搜索得來,本次測試未涉及

 

 

1、滑鼠拖拽打開新窗口

滑鼠拖拽是現在非常流行的用戶習慣,很多瀏覽器都內置或者可以通過插件的方式來支持滑鼠拖拽式瀏覽。但是通過這種方式打開的頁面,基本全都丟失referrer。並且,這種情況下,也無法使用window.opener的方式去獲取丟失的referrer了。

2、點擊Flash內部鏈接

點擊Flash上到達另外一個網站的時候,Referrer的情況就比較雜亂了。

IE下,通過客戶端Javascript的document.referrer讀取到的值是空的,但是如果你使用流量監控軟體看一下的話,你會發現,實際上HTTP請求中的Referer報文頭卻是有值的,這可能是IE實現的Bug。同時,這個值指向的是Flash文件的地址,而不是來源網頁的地址。

3、HTTPS跳轉到HTTP

從HTTPS的網站跳轉到HTTP的網站時,瀏覽器是不會發送referrer的。這個各大瀏覽器的行為是一樣的。

例如,我們在HTTPS下使用Google Reader或是Gmail的時候,點擊某個鏈接去到另外一個網站,那麼從技術上來說,這樣的訪問和用戶直接鍵入網址訪問是沒有什麼分別的。

 

 

    

推薦閱讀文章

Bookmark the permalink ,來源:互聯網