新聞中心

http 協(xié)議定義了40多個服務(wù)器狀態(tài)代碼,其中9個明確用于URL重定向。每個重定向狀態(tài)代碼都以數(shù)字 3 (HTTP 3xx) 開頭,并且有自己的處理重定向的方法。雖然它們中的一些是相似的,但它們都以不同的方式處理重定向。
作為站長,了解您可能遇到的各種超文本傳輸??協(xié)議 (HTTP) 狀態(tài)代碼非常重要。像“307重定向”這樣的其他錯誤對于確保訪問者可以成功訪問您的URL(并且您不會受到搜索引擎的懲罰)至關(guān)重要。但是,這并不是唯一可用的重定向類型,因此您可能想知道何時適合使用它。
在這篇文章中,我們將深入介紹HTTP 307臨時重定向和307內(nèi)部重定向狀態(tài)代碼,包括它們的重要性以及它們與其他 3xx 重定向狀態(tài)代碼的區(qū)別。
什么是HTTP 307臨時重定向?
互聯(lián)網(wǎng)工程任務(wù)組 (IETF) 將307臨時重定向定義為:
307(臨時重定向)狀態(tài)碼表示目標(biāo)資源臨時駐留在不同的 URI 下,如果用戶代理執(zhí)行自動重定向到該 URI,則用戶代理不得更改請求方法。由于重定向會隨著時間的推移而改變,客戶端應(yīng)該繼續(xù)使用原始的有效請求 URI 來處理未來的請求。
有數(shù)十種HTTP狀態(tài)代碼,分為五個主要類別。例如,遵循“4XX”結(jié)構(gòu)的代碼,例如404,是客戶端錯誤。
HTTP“3XX”是重定向類別。有九種不同類型的重定向。例如,301狀態(tài)代碼用于指示網(wǎng)頁何時永久移動。
重定向狀態(tài)代碼對于搜索引擎優(yōu)化 (SEO)至關(guān)重要。將用戶和搜索引擎機器人正確路由到適當(dāng)?shù)?URL 很重要,尤其是當(dāng)他們移動時。
307是一種臨時重定向。此HTTP響應(yīng)狀態(tài)代碼意味著某人請求的URL已暫時移動到不同的URI(用戶資源標(biāo)識符),但最終將返回其原始位置。此外,它還告訴搜索引擎您的服務(wù)器與HTTP 1.1兼容。
無需太技術(shù)化,307重定向是302重定向的較新版本(或后續(xù)版本)。后者可用于臨時將用戶重新路由到新URL,這在您重新設(shè)計網(wǎng)站時會派上用場。
另一方面,307重定向表示用戶請求的 URL 已移動到臨時位置,但會返回。302和307之間的主要區(qū)別在于請求方法不會隨著307狀態(tài)代碼而改變:
例如,請求不能從GET更改為POST。它必須是GET和GET,或者POST和POST。簡而言之,這些請求-響應(yīng)方法是瀏覽器和服務(wù)器通信的方式。您可以在W3Schools上詳細(xì)了解各種HTTP請求方法之間的區(qū)別。
HTTP 3xx重定向的工作原理
在我們深入研究HTTP 307臨時重定向和307內(nèi)部重定向響應(yīng)之前,讓我們了解HTTP重定向的工作原理。
HTTP狀態(tài)代碼是從服務(wù)器到瀏覽器的響應(yīng)。每個狀態(tài)代碼都是一個三位數(shù)字,第一個數(shù)字定義了它是什么類型的響應(yīng)。HTTP 3xx狀態(tài)代碼意味著重定向。它們命令瀏覽器重定向到一個新的 URL,該 URL在服務(wù)器響應(yīng)的Location標(biāo)頭中定義。
HTTP 3xx重定向
當(dāng)您的瀏覽器遇到來自服務(wù)器的重定向請求時,它需要了解此請求的性質(zhì)。各種HTTP 3xx重定向狀態(tài)代碼處理這些請求。了解所有這些將有助于我們更好地理解 307 臨時重定向和 307 內(nèi)部重定向。
我們談的時候,你應(yīng)該使用307重定向之前,它可能有助于了解如何它的工作原理。首先,您的瀏覽器向您嘗試訪問的站點的Web服務(wù)器發(fā)送初始請求。
使用Location標(biāo)頭,服務(wù)器然后以HTTP 3XX狀態(tài)代碼(在本例中為307)進行響應(yīng)。然后瀏覽器將請求發(fā)送到新的URL位置,服務(wù)器再次響應(yīng)(這次通過發(fā)送顯示網(wǎng)頁所需的數(shù)據(jù))。
請注意,有兩種類型的307重定向:臨時和內(nèi)部。307內(nèi)部重定向是307臨時的變體,發(fā)生在瀏覽器級別。因此,它不會影響您網(wǎng)站的SEO。
各種HTTP 3xx重定向
有幾種類型的HTTP 3xx重定向狀態(tài)代碼。最初的HTTP規(guī)范不包括307臨時重定向和308永久重定向,因為這些角色是由301永久遷移和302發(fā)現(xiàn)來填補的。
然而,大多數(shù)客戶端將HTTP請求方法從POST更改為GET以獲取301和302重定向響應(yīng),盡管HTTP規(guī)范不允許客戶端這樣做。這種行為需要在HTTP/1.1更新中引入更嚴(yán)格的307 臨時重定向和308 永久重定向狀態(tài)代碼。
HTTP 307 內(nèi)部重定向響應(yīng)是307 臨時重定向狀態(tài)代碼的變體。它不是由HTTP標(biāo)準(zhǔn)定義的,只是一個本地瀏覽器實現(xiàn)。我們稍后會更詳細(xì)地討論它。
雖然默認(rèn)情況下會緩存諸如301和308之類的重定向狀態(tài)代碼,但其他諸如302和307之類的則不會。但是,您可以通過添加Cache-Control或Expires響應(yīng)頭字段使所有重定向響應(yīng)可緩存(或不可緩存)。
HTTP重定向并不復(fù)雜
使用302 vs 303 vs 307進行臨時重定向
如上圖所示,對于臨時重定向,您有三個選項:302、303或307。但是,大多數(shù)客戶端將302狀態(tài)代碼視為303響應(yīng)并將HTTP請求方法更改為GET。從安全的角度來看,這并不理想。
“ RFC 1945 和 RFC 2068 指定不允許客戶端更改重定向請求的方法。然而,大多數(shù)現(xiàn)有的用戶代理實現(xiàn)將 302 視為 303 響應(yīng),無論原始請求方法如何,對 Location 字段值執(zhí)行 GET。狀態(tài)代碼 303 和 307 已添加用于希望明確明確客戶端期望哪種反應(yīng)的服務(wù)器。”– HTTP/1.1。狀態(tài)代碼定義,W3.org
因此,對于需要維護HTTP請求方法的臨時重定向,請使用更嚴(yán)格的HTTP 307臨時重定向響應(yīng)。
例如將/register-form.html重定向到signup-form.html,或從/login.php重定向到/signin.php。
對于需要將重定向請求方法更改為GET的情況,請改用303 See Other響應(yīng)。
例如,從 /register.php頁面重定向POST請求以通過GET請求加載/success.html頁面。
除非您的目標(biāo)受眾使用舊客戶端,否則請避免使用302 Found重定向響應(yīng)。
了解僅HTTPS站點的HTTP 307內(nèi)部重定向
如果您有一個僅支持HTTPS的站點,當(dāng)您嘗試通過常規(guī)http://不安全地訪問它時,您的瀏覽器將自動重定向到其安全的https://版本。通常,這發(fā)生在來自服務(wù)器的301永久遷移重定向響應(yīng)中。
例如,如果您訪問http://citibank.com并在Chrome中加載DevTools并選擇網(wǎng)絡(luò)選項卡,您可以看到瀏覽器和服務(wù)器之間發(fā)出的所有請求。
第一個響應(yīng)是301 Moved Permanently,它將瀏覽器重定向到站點的HTTPS版本。
301響應(yīng)重定向到HTTPS版本
如果我們深入研究第一個請求的Headers字段,我們可以看到Location響應(yīng)標(biāo)頭定義了重定向的安全URL是什么。
位置響應(yīng)頭定義了重定向URL
這種方法的問題在于惡意行為者可以劫持網(wǎng)絡(luò)連接以將瀏覽器重定向到自定義URL。像這樣的中間人 (MITM) 攻擊非常普遍。一部受歡迎的電視劇甚至在其中一集中對其進行了惡搞。
此外,惡意方可以在不更改瀏覽器地址欄中顯示的URL的情況下發(fā)起MITM攻擊。例如,可以為用戶提供看起來與原始站點完全相同的網(wǎng)絡(luò)釣魚頁面。
由于一切看起來都一樣,包括地址欄中的URL,大多數(shù)用戶會很樂意輸入他們的憑據(jù)。你可以想象為什么這會很糟糕。
301重定向到HTTPS不安全
使用HTTP 307內(nèi)部重定向安全重定向
現(xiàn)在,讓我們用閃電博嘗試相同的示例。訪問http://www.wbolt.com會導(dǎo)致網(wǎng)絡(luò)請求,如下面的屏幕截圖所示。
307內(nèi)部重定向示例
站點的第一個請求與前面的示例類似,但這次會導(dǎo)致307 內(nèi)部重定向響應(yīng)。單擊它會向我們顯示有關(guān)此響應(yīng)的更多詳細(xì)信息。
注意:如果您嘗試直接使用https://訪問該站點,您將不會看到此標(biāo)頭,因為瀏覽器不需要執(zhí)行任何重定向。
307內(nèi)部重定向響應(yīng)的響應(yīng)頭
注意 Non-Authoritative-Reason: HSTS響應(yīng)頭。這是HTTP 的嚴(yán)格傳輸安全 (HSTS),也稱為Strict-Transport-Security響應(yīng)標(biāo)頭。
什么是 HSTS(嚴(yán)格傳輸安全)?
IETF于2012年批準(zhǔn)了HTTP嚴(yán)格傳輸安全(HSTS),以強制瀏覽器在站點嚴(yán)格運行HTTPS時使用安全連接。
這類似于Chrome或Firefox說:“我甚至不會嘗試通過不安全的HTTP協(xié)議請求此站點或其任何資源。相反,我會將其更改為HTTPS,然后再試一次?!?/p>
通過307內(nèi)部重定向響應(yīng)提高安全性
深入研究第二個請求的響應(yīng)頭會讓我們更好地理解。
驗證HSTS響應(yīng)頭
在這里,您可以看到 strict-transport-security: max age=31536000響應(yīng)頭。
strict-transport-security響應(yīng)頭的max-age屬性定義了瀏覽器應(yīng)該遵循這種模式的時長。在上面的示例中,此值設(shè)置為3153600秒(或 1 年)。
一旦站點返回此響應(yīng)標(biāo)頭,瀏覽器甚至不會嘗試發(fā)出普通的HTTP請求。相反,它將執(zhí)行307 內(nèi)部重定向到HTTPS并重試。
每次重復(fù)此過程時,都會重置響應(yīng)標(biāo)頭。因此,瀏覽器將無法無限期地發(fā)出不安全的請求。
什么是HSTS預(yù)加載列表?
即使使用HSTS,也存在明顯的安全問題。您使用瀏覽器發(fā)送的第一個HTTP請求是不安全的,因此重復(fù)了我們之前在花旗銀行中觀察到的問題。
此外,HSTS響應(yīng)頭只能通過HTTPS發(fā)送,因此初始的不安全請求甚至無法返回。
為了解決這個問題,HSTS在其響應(yīng)頭中支持預(yù)加載屬性。這個想法是有一個網(wǎng)站列表,強制在瀏覽器中預(yù)加載HSTS,完全繞過這個安全問題。
將您的站點添加到瀏覽器的HSTS預(yù)加載列表中,它會知道您的站點執(zhí)行嚴(yán)格的HSTS策略,即使它是第一次訪問您的站點。然后,瀏覽器將使用307 內(nèi)部重定向響應(yīng)將您的站點重定向到其安全的https://方案,然后再請求其他任何內(nèi)容。
您應(yīng)該注意,與307 Temporary Redirect不同,307 Internal Redirect響應(yīng)是瀏覽器本身設(shè)置的“假標(biāo)頭”。它不是來自服務(wù)器、網(wǎng)絡(luò)主機或 CMS(例如 WordPress)。
將站點添加到HSTS預(yù)加載列表有許多優(yōu)點:
HSTS預(yù)加載列表要求
如果要將站點添加到瀏覽器的HSTS預(yù)加載列表中,則需要勾選以下條件:
- 為您的域安裝了有效的SSL/TLS證書。
- 通過將所有HTTP流量重定向到HTTPS來強制執(zhí)行嚴(yán)格的HTTPS。
- 所有子域都應(yīng)通過HTTPS提供服務(wù),特別是www子域(如果該子域的DNS記錄存在)。
- 您的基本域應(yīng)包含具有以下屬性的 HSTS 標(biāo)頭:
- 最大周期屬性必須至少31536000秒(1年)來設(shè)置。
- includeSubdomains和預(yù)載指令必須指定。
- 如果您提供額外的重定向服務(wù),它必須包含HSTS標(biāo)頭,而不是它重定向到的頁面。
從HSTS預(yù)加載列表中刪除您的域可能既困難又耗時(最多 12 周或更長時間)。當(dāng)且僅當(dāng)您完全致力于在您的站點上使用HTTPS時啟用 HSTS。您可以通過在hstspreload.org上提交表單將您的站點從HSTS預(yù)加載列表中刪除。
將您的站點添加到HSTS預(yù)加載列表
HSTS預(yù)加載列表提交
有兩種方法可以將您的站點添加到HSTS預(yù)加載列表中。
嚴(yán)格傳輸安全:max-age=63072000;包括子域;預(yù)載
使用第二種方法,瀏覽器第一次訪問您的網(wǎng)站將不會完全安全。但是,后續(xù)訪問將是完全安全的。
Mozilla的HSTS預(yù)加載列表示例
您可以使用安全標(biāo)頭等免費在線工具來驗證您的站點是否正在執(zhí)行HSTS。如果您擔(dān)心瀏覽器對HSTS的支持,您可以放心,因為當(dāng)今使用的幾乎所有瀏覽器都支持 HSTS。
HSTS得到所有主流瀏覽器的廣泛支持
HTTP 307 重定向和SEO
由于307 Temporary Redirect響應(yīng)顯示資源已臨時移至新 URL,因此搜索引擎不會更新其索引以包含此新 URL。來自原始 URL 的“l(fā)ink-juice”不會傳遞到新 URL。
這與 301 Moved Permanently 重定向形成對比,其中搜索引擎更新其索引以包含新 URL,并將“l(fā)ink-juice”從原始 URL 傳遞到新 URL。
使用307 內(nèi)部重定向響應(yīng),一切都發(fā)生在瀏覽器級別。因此,它應(yīng)該不會對您網(wǎng)站的 SEO 產(chǎn)生直接影響。但是,將您的站點添加到 HSTS 預(yù)加載列表可以使其加載更快且更安全,這兩者都可以幫助它在搜索結(jié)果中排名更高。
注意不要無意中將用戶和機器人重定向到無限重定向循環(huán)中,從而導(dǎo)致“重定向過多”錯誤。
何時使用307重定向
重定向可能是您網(wǎng)站維護的一個有用部分。但是,重要的是要小心使用它們的時間和方式,以及使用哪些。過多的URL重定向會減慢您的加載時間,并損害您的用戶體驗 (UX) 和SEO。
因此,最佳做法是謹(jǐn)慎使用它們。話雖如此,使用307重定向時有一些場景是合適的。這包括當(dāng)您:
- 更新頁面上的內(nèi)容
- 遷移到不同的內(nèi)容管理系統(tǒng) (CMS)
- 切換域名
- 由于維護而暫時關(guān)閉您的網(wǎng)站
關(guān)鍵是僅在您知道移動是暫時的才使用307重定向。否則,您最好使用301或308重定向,這樣您的SEO中的鏈接權(quán)重就會從舊URL傳遞到新URL。
當(dāng)您打算永久刪除或移動頁面,或者您正在更改頁面的永久鏈接結(jié)構(gòu)時,通常最好使用301重定向。同樣,當(dāng)您仍然希望它們指向的頁面出現(xiàn)在搜索引擎結(jié)果中時,最好使用 301 重定向。如果您想在您創(chuàng)建的新頁面上從訪問者那里獲得反饋,同時又不妨礙您的SEO,這也會很有幫助。
如何在網(wǎng)站上實施307臨時重定向
除了了解各種類型的重定向之外,了解如何正確實現(xiàn)和使用它們也很重要。以下是在您的網(wǎng)站上使用 307 重定向的一些關(guān)鍵提示。
通過.htaccess文件實現(xiàn)臨時重定向
有幾種不同的方法來實現(xiàn)重定向。在WordPress網(wǎng)站上,最好的方法通常是在您的.htaccess文件中指定307重定向,該文件是您的主要服務(wù)器配置文件。
請注意,由于這是一個如此重要的文件,因此謹(jǐn)慎對待對其所做的任何更改至關(guān)重要。我們還建議在修改此文件之前創(chuàng)建站點的備份,尤其是在您沒有太多開發(fā)經(jīng)驗的情況下。
然后您可以通過文件傳輸協(xié)議 (FTP) 客戶端或您的主機帳戶的文件管理器應(yīng)用程序訪問它。通常,您可以在站點根目錄的public_html文件夾中找到它:
在.htaccess文件中,您可以使用mod_rewrite模塊實現(xiàn)重定向。這看起來像這樣:
# 使用臨時重定向?qū)⒎?wù)頁面重定向到新頁面 RewriteRule “^/service$” “/about/service” [R]
如需更多信息和指導(dǎo),您可能需要參考Google的搜索中心關(guān)于創(chuàng)建重定向的指南。
使用插件實現(xiàn)鏈接重定向
除了自己手動配置重定向,另一種選擇是使用WordPress重定向解決方案,例如Quick Page/Post Redirect Plugin:
這個免費工具可讓您將301、302和307重定向添加到您的WordPress 網(wǎng)站。但是,重要的是要注意它使用所謂的“元刷新”重定向。
元刷新重定向發(fā)生在瀏覽器中,而不是您的Web服務(wù)器中。這意味著重定向會告訴瀏覽器在特定時間跨度內(nèi)導(dǎo)航到指定的URL。當(dāng)您看到一個網(wǎng)頁內(nèi)容如下:“如果您沒有在5秒內(nèi)重定向,請單擊此處”時,就會發(fā)生這種情況。
這些類型的重定向不僅會使您的訪問者感到困惑,而且如果使用頻率過高,它們還會使搜索引擎抓取工具認(rèn)為您的網(wǎng)站包含垃圾郵件內(nèi)容。因此,我們只建議在您無法通過.htaccess文件設(shè)置重定向時使用此方法(例如,如果您的 Web 主機不提供對它的訪問)。
小結(jié)
深入了解HTTP響應(yīng)狀態(tài)代碼是成為成功網(wǎng)站所有者的重要組成部分。設(shè)置重定向可以幫助您正確執(zhí)行站點維護。如果您只想臨時移動URL,我們建議您使用307重定向。
正如我們在這篇文章中所討論的,307重定向是一種狀態(tài)代碼,您可以使用它來將訪問者指向一個新的 URL,但最終在您完成更改或更新后將他們帶回原始 URL。當(dāng)您不希望鏈接權(quán)重從舊URL傳遞到新URL時,最好使用此選項。
此外,或者你應(yīng)該閱讀更多關(guān)于鏈接重定向的相關(guān)文章,以加深這一塊的了解:
- 深入了解301重定向及其與SEO優(yōu)化之間的關(guān)系
- 基于SEO優(yōu)化角度應(yīng)該選擇301還是302重定向
- 常見HTTP狀態(tài)代碼列表及對應(yīng)意義
網(wǎng)站標(biāo)題:什么是307臨時重定向及何時需使用
瀏覽路徑:http://www.fisionsoft.com.cn/article/dhpshie.html


咨詢
建站咨詢
