A 有一個處理登錄表單的 React 應用程式和一個顯示儀表板的單獨的 React 應用程式。我希望瀏覽器在登錄成功時加載儀表板應用程式。
我試圖通過從我的服務器發送重定向回應來做到這一點(狀態代碼:302,附加位置標頭)。服務器正確回應此請求并將index.html儀表板應用程式的檔案發送到客戶端。
瀏覽器成功接收到這個檔案,但沒有加載它(URL 也沒有改變)。
這是接收到的index.html檔案的回應標頭:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 624
Content-Type: text/html; charset=utf-8
Last-Modified: Sun, 16 Oct 2022 09:40:25 GMT
Date: Sun, 16 Oct 2022 16:38:37 GMT
我的問題是:如何讓瀏覽器將所有當前使用的 React 代碼替換為來自重定向的代碼?我需要為此設定額外的標題嗎?還是應該以某種方式在前端處理?
uj5u.com熱心網友回復:
我設法通過做這三件事來實作它:
在登錄應用程式中,一旦我收到儀表板
index.html檔案的回應,我將 URL 重置為根路徑,并使用window.location.href = "http://localhost:3001/". 這會自動加載這個新收到index.html的檔案。在我的服務器上,我確保檢查請求是否包含正確的 cookie。如果是,我會回傳儀表板應用程式檔案。否則,我回傳登錄應用程式檔案。
每當瀏覽器發送對某個內部 React 路徑(例如
localhost:3001/article/1)的請求時,我都會回傳正確的index.html檔案。加載后index.html,應用程式將自動打開正確的頁面(我在這里使用 react-router)。當我想在我的 React 應用程式中打開一個特定路由的鏈接時,這會處理這種情況。
一旦登錄成功并且我被重定向到儀表板應用程式,如果我單擊后退按鈕,瀏覽器將再次打開先前替換的登錄應用程式。發生這種情況是因為來自服務器的所有回應都會自動兌現。
為了避免這種情況,我將
Cache-Control標頭設定no-store為我在服務器上的回應。這樣,我可以單擊后退按鈕并重定向到根儀表板頁面(或儀表板應用程式處理的其他路徑)。no-cache僅在提供登錄應用程式時才需要標頭。可以快取儀表板應用程式。我不確定當我實作注銷功能時這將如何改變。
這幾乎可以在我服務的兩個 React 應用程式之間進行無縫轉換。no-cache條件似乎有點苛刻,但目前我看不到任何解決辦法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/518634.html
標籤:反应http
