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


