《高性能網站建設指南》閱讀筆記_規則11-?避免重定向
發布時間:2013-11-22 瀏覽:437打印字號:大中小
重定向就是從一個URL到另一個URL,它會使你的頁面變慢。重定向有很多種,“301 Moved Permancenty”和“302 Moved Temporarily”是最常用的兩種。
301: 用戶請求的文檔在其他的地方,新的URL在Location中給出,瀏覽器自動訪問新的URL。,并且是永久性轉移。
302:搜索引擎返回302錯誤表示被請求的資源暫時轉移(Moved temporatily),然后會給出一個轉移后的URL,而瀏覽器在處理服務器返回的302錯誤時,原則上會重新建立一個TCP連接,然后再取重定向后的URL的頁面;但是如果頁面存在于緩存中,則不重新獲取。(存在濫用情況)
擴展: 301重定向是一種非常重要的自動轉向技術。在更換域名的時候起著不可替代的作用,他不僅可以實現網頁的批量指定轉跳,還可促進搜索引擎優化效果。不同于302,從搜索引擎優化角度出發,301重定向是網址重定向最為可行的一種辦法。當網站的域名發生變更后,搜索引擎只對新網址進行索引,同時又會把舊地址下原有的外部鏈接如數轉移到新地址下,從而不會讓網站的排名因為網址變更而受到絲毫影響。當然各個搜索引擎對301的處理方式是不一樣的。
302的三大危害:
一:黑帽SEO濫用
302重定向代表著暫時性轉移,程序員設計一段代碼,使點擊訪問的目標網址出現在黑帽SEO所要優化的網址之內,形成一段由“優化網址+目標網址”組合而成的302網址,藉此接獲用戶點擊,騙取網頁權重。目前,302重定向已經被視為垃圾信息,遭到各大搜索引擎的打擊。
二:消耗優化網址資源
302重定向的排列組合,有些站長使用302重定向并不是為了欺騙搜索引擎,僅僅是為了防止自己網站的通過外部鏈接流向其他權重。這種302重定向很容易遭到惡意訪問,訪問者將“優化網址”與任意網址甚至是一段字符串組合,濫用網站本身的302重定向功能消耗服務器資源,返回大量的302、404代碼,影響網站的穩定性。
三:跨站腳本攻擊
跨站腳本攻擊漏洞,根據網站安全監測工具的報告,這種302重定向實際上是一種跨站腳本攻擊漏洞,惡意用戶可以使用該漏洞來盜取用戶賬戶信息、模擬其他用戶身份登錄,更甚至可以修改網頁呈現給其他用戶的內容。極大的妨害了網絡安全和用戶體驗。
除了301到302,還有其他方法實現重定向。HTML文檔的頭中包含的meta refresh標簽可以在content屬性所指定的秒數之后重定向到url屬性的地址。就是的document.location可以設置。但是如果必須采用重定向,作者推薦使用標準的3**HTTP狀態碼,這主要是為了確保后退按鈕可以正常工作。
重定向是如何損傷性能的
如果第一個請求就是重定向,在重定向完畢并且HTML文檔下載完畢之前,是沒有任何東西顯示給用戶的,就像js和css引起的白屏一樣。在用戶和HTML之間插入的重定向延遲了延遲了頁面中的所有東西。
為什么使用重定向
用處:網站重新設計,跟蹤流量,記錄廣告點擊,建立已于記憶的url。
下面是一些使用重定向的典型解決方案:
1.缺少結尾的斜線:我們在請求http://www.taoche.com/buycar時會引起重定向url變為http://www.taoche.com/buycar/ (多了一個杠),這是一種最為浪費,發生也最為頻繁的重定向。原因是:它允許自動索引(autoindexing,自動轉到默認的index.html上)并且能夠獲得與當前目錄相關的URL(如logo.gif)然而,很多流行的web頁面并不依賴于自動索引,而是依賴特定的URL和處理器。另外,URL通常也與根目錄相關而不是和當前目錄相關。
注意當主機名后缺少皆為斜線時是不會發生重定向的,例如http://www.taoche.com不會產生重定向,但是也會加上斜杠http://www.taoche.com/。原因是,瀏覽區在進行GET請求時必須指定一些路徑,如果沒有路徑,就會簡單的使用文檔根(/)。
2.連接網站:當我們改變網站后端邏輯的時候,很可能所需的url也變了,這時候就需要將用戶從舊的url轉移到新的url,這個時候我們往往使用最多的也是重定向。我們應該盡量去避免。如果整合兩個后端可以避免,但是需要更多的開發工作。
3.跟蹤站內流量:使用Referer日志,referrer網站來路;訪問者進入網站任何途徑。HTTP Referer是header的一部分,當瀏覽器向web服務器發出請求的時候,一般會帶上Referer,告訴服務器用戶從那個頁面連接過來的,服務器藉此可以獲得一些信息用于處理。
4.跟蹤出站流量:跟蹤出站流量的時候不能使用使用referrer。我們打開百度,搜索一個關鍵詞,連到其他網站,發現就會有一次重定向。但是重定向是耗費性能的,所以我們看雅虎搜索http://www.yahoo.cn/,相同的操作并沒有重定向,雅虎使用的是信標,信標(beacon):
可以在HTTP請求的URL中包含跟蹤信息。跟蹤信息可以從信標web服務器的訪問日志中提取出來。信標響應通常是一個1px*1px的透明圖片。書中還提到一個更為優秀的204響應,因為他更小,從來不會被緩存,而且絕不會改變瀏覽器的狀態。但是我沒有查到相關的資料。
在雅虎搜索中,目標是無論任何用戶單擊搜索結果連接時都要發送一個信標,在通過為這個連接提供的onclick處理器來完成。
注意,發送信標和頁面自身卸載之間存在竟態情形,圖片信標的onload處理器可以確保在卸載文檔之前信標傳送完畢。
代碼實例:
Performance - Wikipedia="" 這樣的寫法可能會和使用重定向一樣慢,因為兩種技巧都必須一個額外的HTTP請求。穩重還提到一種XMLHttpRequest來發送信標,非常的復雜。說到這里,可能會覺得信標無用,但是對于有target=”_bank”屬性的連接而言,信標能很好的工作,因為這種情下不會出現竟態情形,簡單的信標就能很好的工作,彈出新的頁面或者彈出式廣告不回卸載前文檔,圖片信標的請求能夠順利完成而不會被中斷,雅虎搜索就是這個道理。
5.美化url:有的時候某個url很復雜,不利用用戶去輸入,我們就提供一個友好的url來給用戶,這個時候也會發生重定向。我們也是用了url的重寫,使用的是ISAPI_REWRITE,URL重寫組件。