前言
頁面的重定向想必大家都知道,如果你是用過 koa ,那麼通過如下代碼,就能讓網頁跳轉至指定頁面:
或者你用過 java 的重定向:
那麼架構内部到底是怎麼實作頁面重定向的呢?這篇小短文可能會讓你更加清楚其中的一些原理。
重定向
概念
當你在浏覽器通路 A 位址時,你會看到浏覽器會重新整理進度條,位址欄被更新為 B 位址。這就是 URL 重定向。
這樣類似的技術,就是由 Http 協定定義的。重定向操作是由服務端向用戶端發送特定的響應狀态來觸發,這類狀态有個專門的狀态碼:3xx ,當浏覽器接收後,将會進行頁面的重定向,即位址發生了跳轉。
幾種狀态碼
302 和 301 的差別
上面列了許多 3xx 的狀态碼,但平時我們最多用的是 301 和 302,這裡就詳細解釋這兩個的差別:
301
永久重定向。如果 A 位址被 301 到 B 位址後,後續再次請求 A 位址的話,浏覽器就會預設首次請求 B 位址,不會再有 A 位址的請求。
等看到第一次通路 /api/books/111 時,頁面被重定向到 /api/books,浏覽器發送兩次請求。但後續再次請求 /api/books/111 時,直接請求了 /api/books 。
是以通常該狀态碼用于網站重構,告知搜尋引擎你以後通路我 301 重定向的位址。
302
相反,302 就是臨時重定向。
平時我們登陸頁面的授權跳轉都是基于此狀态碼。因為用戶端通路的頁面是臨時不可用,滿足了某些條件後,可以繼續使用。
對比 301 的請求,能看到兩次 /api/books/222 的請求都被“記錄在案”。
koa 中的重定向
來看下 koa 中 response 的 redirect 的重定向源碼:
能看到在這段重定向的代碼中,分别設定了 location 和 狀态碼,依靠他們來完成重定向的功能。
當然我們可以自己簡單的實作一個伺服器重定向功能:
總結
如果你隻是單純的使用架構的 redirect api,而不清楚其内部的原理,可能這篇會幫助你了解更多些。
畢竟這是 Http 的基礎,會讓你對浏覽器的重定向有個概念。
關于我
一位“前端工程師”,樂于實踐,并分享前端開發經驗。
如果有問題或者想法,歡迎各位評論留言,願大家共同進步。
關注【前端雨爸】,查閱更多前端技術心得。