天天看點

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

前言

頁面的重定向想必大家都知道,如果你是用過 koa ,那麼通過如下代碼,就能讓網頁跳轉至指定頁面:

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

或者你用過 java 的重定向:

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

那麼架構内部到底是怎麼實作頁面重定向的呢?這篇小短文可能會讓你更加清楚其中的一些原理。

重定向

概念

當你在浏覽器通路 A 位址時,你會看到浏覽器會重新整理進度條,位址欄被更新為 B 位址。這就是 URL 重定向。

這樣類似的技術,就是由 Http 協定定義的。重定向操作是由服務端向用戶端發送特定的響應狀态來觸發,這類狀态有個專門的狀态碼:3xx ,當浏覽器接收後,将會進行頁面的重定向,即位址發生了跳轉。

幾種狀态碼

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

302 和 301 的差別

上面列了許多 3xx 的狀态碼,但平時我們最多用的是 301 和 302,這裡就詳細解釋這兩個的差別:

301

永久重定向。如果 A 位址被 301 到 B 位址後,後續再次請求 A 位址的話,浏覽器就會預設首次請求 B 位址,不會再有 A 位址的請求。

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

等看到第一次通路 /api/books/111 時,頁面被重定向到 /api/books,浏覽器發送兩次請求。但後續再次請求 /api/books/111 時,直接請求了 /api/books 。

是以通常該狀态碼用于網站重構,告知搜尋引擎你以後通路我 301 重定向的位址。

302

相反,302 就是臨時重定向。

平時我們登陸頁面的授權跳轉都是基于此狀态碼。因為用戶端通路的頁面是臨時不可用,滿足了某些條件後,可以繼續使用。

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

對比 301 的請求,能看到兩次 /api/books/222 的請求都被“記錄在案”。

koa 中的重定向

來看下 koa 中 response 的 redirect 的重定向源碼:

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

能看到在這段重定向的代碼中,分别設定了 location 和 狀态碼,依靠他們來完成重定向的功能。

當然我們可以自己簡單的實作一個伺服器重定向功能:

java 重定向_http 頁面重定向 redirect前言重定向koa 中的重定向總結關于我

總結

如果你隻是單純的使用架構的 redirect api,而不清楚其内部的原理,可能這篇會幫助你了解更多些。

畢竟這是 Http 的基礎,會讓你對浏覽器的重定向有個概念。

關于我

一位“前端工程師”,樂于實踐,并分享前端開發經驗。

如果有問題或者想法,歡迎各位評論留言,願大家共同進步。

關注【前端雨爸】,查閱更多前端技術心得。