URL重定向

URL 重定向是一種當實際資源捡鱼,如單個頁面拐叉、表單或者整個 Web 應(yīng)用被遷移到新的 URL 下的時候们何,保持(原有)鏈接可用的技術(shù)舒憾。

重定向原理

在 HTTP 協(xié)議中彬呻,重定向操作由服務(wù)器通過發(fā)送特殊的響應(yīng)(即 redirects)而觸發(fā)哑蔫。HTTP 協(xié)議的重定向響應(yīng)的狀態(tài)碼為 3xx 。瀏覽器在接收到重定向響應(yīng)的時候茬射,會采用該響應(yīng)提供的新的 URL ,并立即進行加載烘苹。大多數(shù)情況下躲株,除了會有一小部分性能損失之外片部,重定向操作對于用戶來說是不可見的镣衡。

下面是HTTP重定向的工作過程

在a中,Alice向www.joes-hardware.com發(fā)送了一條請求

GET /hammers.html HTTP/1.0

Host: www.joes-hardware.com

User-Agent: Mozilla/4.51 [en] (X11; U; IRIX 6.2 IP22)

  在b中档悠,服務(wù)器沒有回送帶有HTTP狀態(tài)碼200的Web頁面主體廊鸥,而是回送了一個帶有HTTP狀態(tài)碼302的重定向報文(Location指明了新的訪問地址)

HTTP/1.0 302 Redirect

Server: Stronghold/2.4.2 Apache/1.3.6

Location: http://161.58.228.45/hammers.html

  現(xiàn)在,在c中辖所,瀏覽器會用重定向URL重新發(fā)送請求惰说,這次會發(fā)送給主機161.58.228.45。

GET /hammers.html HTTP/1.0

Host: 161.58.228.45

User-Agent: Mozilla/4.51 [en] (X11; U; IRIX 6.2 IP22)

重定向映射可以劃分為三個類別:永久重定向缘回、臨時重定向和特殊重定向吆视。永久性重定向操作是永久性的。它表示原 URL 不應(yīng)再被使用酥宴,而應(yīng)該優(yōu)先選用新的 URL啦吧。搜索引擎機器人會在遇到該狀態(tài)碼時觸發(fā)更新操作,在其索引庫中修改與該資源相關(guān)的 URL 拙寡,這種情景服務(wù)器的返回狀態(tài)碼為301 moved permanently授滓。有時候請求的資源無法從其標準地址訪問,但是卻可以從另外的地方訪問肆糕。在這種情況下可以使用臨時重定向般堆。搜索引擎不會記錄該新的、臨時的鏈接诚啃,這種情景服務(wù)器返回的狀態(tài)碼為302 Found淮摔。還有一種特殊的重定向,服務(wù)器返回304 not modified始赎,告訴客戶端資源未被修改和橙,可以使用本地緩存的資源。

重定向機制的實現(xiàn)

重定向的實現(xiàn)有3種方式极阅,

第一種胃碾,即HTTP 協(xié)議中重定向機制是應(yīng)該優(yōu)先采用的創(chuàng)建重定向映射的方式,這需要Web 開發(fā)者對于服務(wù)器有控制權(quán)筋搏,或能對其進行配置仆百。如在apache下重定向映射可以在服務(wù)器的配置文件中設(shè)置。mod_alias 模塊提供了 Redirect 和 Redirect_Match 兩種指令來設(shè)置 302 響應(yīng)(默認值):

<VirtualHost *:80>

ServerName example.com

Redirect / http://www.example.com

</VirtualHost>

URL http://example.com/ 會被重定向至 http://www.example.com/奔脐。

第二種是HTML重定向機制俄周,Web 開發(fā)者可以在精心制作的 HTML 頁面的 <head>? 部分添加一個 <meta> 元素吁讨,并將其 http-equiv 屬性的值設(shè)置為 refresh 。當顯示頁面的時候峦朗,瀏覽器會檢測該元素建丧,然后跳轉(zhuǎn)到指定的頁面。

<head>

? <meta http-equiv="refresh" content="0;URL=http://www.example.com/" />

</head>

content 屬性的值開頭是一個數(shù)字波势,指示瀏覽器在等待該數(shù)字表示的秒數(shù)之后再進行跳轉(zhuǎn)翎朱。建議始終將其設(shè)置為 0 來獲取更好的可訪問性。該方法僅適用于 HTML 頁面(或類似的頁面)尺铣,然而并不能應(yīng)用于圖片或者其他類型的內(nèi)容拴曲。

在 JavaScript 中,重定向機制的原理是設(shè)置 window.location 的屬性值凛忿,然后加載新的頁面澈灼。

window.location = "http://www.example.com/";

與 HTML 重定向機制類似,這種方式并不適用于所有類型的資源店溢,并且顯然只有在支持 JavaScript 的客戶端上才能使用叁熔。另外一方面,它也提供了更多的可能性床牧,比如在只有滿足了特定的條件的情況下才可以觸發(fā)重定向機制的場景荣回。

應(yīng)用場景

HTTP重定向可以在服務(wù)器間導(dǎo)引請求,但它有以下幾個缺點:需要原始服務(wù)器進行大量處理來判斷要重定向到哪臺服務(wù)器上去叠赦。有時驹马,發(fā)布重定向所需的處理量幾乎與提供頁面本身所需的處理量一樣;增加了用戶時延除秀,因為訪問頁面時要進行兩次往返糯累;如果重定向服務(wù)器出故障,站點就會癱瘓册踩。

常見的應(yīng)用場景有泳姐,

有些Web站點會將HTTP重定向作為一種簡單的負載均衡形式來使用。處理重定向的服務(wù)器(重定向服務(wù)器)找到可用的負載最小的內(nèi)容服務(wù)器暂吉,并將瀏覽器重定向到那臺服務(wù)器上去胖秒。

域名別稱,理想情況下慕的,一項資源只有一個訪問位置阎肝,也就是只有一個 URL 。但是由于種種原因肮街,需要為資源設(shè)定不同的名稱(即不同的域名风题,例如帶有和不帶有 www 前綴的URL,以及簡短易記的 URL 等)。在這種情況下沛硅,實用的方法是將其重定向到那個實際的(標準的)URL眼刃,而不是復(fù)制資源。

在以下幾種情況下可以使用域名別稱:

擴大站點的用戶覆蓋面摇肌。一個常見的場景是擂红,假如站點位于? www.example.com? 域名下,那么通過? example.com 也應(yīng)該可以訪問到围小。這種情況下昵骤,可以建立從 example.com 的頁面到? www.example.com 的重定向映射。此外還可以提供常見的同義詞吩抓,或者該域名容易導(dǎo)致的拼寫錯誤的域名別稱涉茧。

遷移到另外一個域名。例如疹娶,公司改名后,你希望用戶在搜索舊名稱的時候伦连,依然可以訪問到應(yīng)用了新名稱的站點雨饺。

強制使用 HTTPS 協(xié)議。對于 HTTP 版本站點的請求會被重定向至采用了 HTTPS 協(xié)議的版本惑淳。如

保持鏈接有效额港,當你重構(gòu) Web 站點的時候,資源的 URL 會發(fā)生改變歧焦。即便是你可以更新站點內(nèi)部的鏈接來適應(yīng)新的命名體系移斩,但無法控制被外部資源使用的 URL 。你并不想因此而使舊鏈接失效绢馍,因為它們會為你帶來寶貴的用戶(并且?guī)椭鷥?yōu)化你的SEO)向瓷,所以需要建立從舊鏈接到新鏈接的重定向映射。

不安全請求的臨時響應(yīng)舰涌,不安全(Unsafe)請求會修改服務(wù)器端的狀態(tài)猖任,應(yīng)該避免用戶無意的重復(fù)操作。一般地瓷耙,你并不想要你的用戶重復(fù)發(fā)送 ?PUT朱躺、POST?或?DELETE?請求。假如你僅僅為該類請求返回響應(yīng)的話搁痛,簡單地點擊刷新按鈕就會(可能會有一個確認信息)導(dǎo)致請求的重復(fù)發(fā)送长搀。在這種情況下,服務(wù)器可以返回一個?303?(See Other) 響應(yīng)鸡典,其中含有合適的響應(yīng)信息源请,或處理成功后?redirect?到另一個?jsp/php頁面。即如果刷新按鈕被點擊的話,只會導(dǎo)致該頁面被刷新巢钓,而不會重復(fù)提交不安全的請求病苗。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市症汹,隨后出現(xiàn)的幾起案子硫朦,更是在濱河造成了極大的恐慌,老刑警劉巖背镇,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咬展,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞒斩,警方通過查閱死者的電腦和手機破婆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胸囱,“玉大人祷舀,你說我怎么就攤上這事∨氡剩” “怎么了裳扯?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谤职。 經(jīng)常有香客問我饰豺,道長,這世上最難降的妖魔是什么允蜈? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任冤吨,我火速辦了婚禮,結(jié)果婚禮上饶套,老公的妹妹穿的比我還像新娘漩蟆。我一直安慰自己,他們只是感情好凤跑,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布爆安。 她就那樣靜靜地躺著,像睡著了一般仔引。 火紅的嫁衣襯著肌膚如雪扔仓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天咖耘,我揣著相機與錄音翘簇,去河邊找鬼。 笑死儿倒,一個胖子當著我的面吹牛版保,可吹牛的內(nèi)容都是我干的呜笑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼彻犁,長吁一口氣:“原來是場噩夢啊……” “哼叫胁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起汞幢,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤驼鹅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后森篷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體输钩,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年仲智,在試婚紗的時候發(fā)現(xiàn)自己被綠了买乃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡钓辆,死狀恐怖剪验,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岩馍,我是刑警寧澤碉咆,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蛀恩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茂浮。R本人自食惡果不足惜双谆,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望席揽。 院中可真熱鬧顽馋,春花似錦、人聲如沸幌羞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽属桦。三九已至熊痴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聂宾,已是汗流浹背果善。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留系谐,地道東北人巾陕。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鄙煤。 傳聞我的和親對象是個殘疾皇子晾匠,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容