2012-05-31 25 views
5

我的應用程序通過響應標頭禁用瀏覽器上的緩存,然後使用Post-Redirect-Get模式啓用後退按鈕以「重新獲取」當前頁面。
但是,現在用Firefox 12和IE 8重新測試時,我並沒有看到我期待的結果(或者我之前見過的IE 6)。Post-Redirect之後的後退按鈕行爲 - 獲取

在選擇後退按鈕後,我可以看到瀏覽器正在嘗試執行原始請求(Post),而不是重定向請求(Get)。當我看着螢火蟲的網絡選項卡上的請求,我看到以下內容:

Post-Redirect-Get

貌似瀏覽器處理POST和GET作爲相同的請求,因此選擇後退按鈕重新提交早報:

Result of Back Button

我使用JSF,但我認爲這是一個瀏覽器的問題。有誰知道爲什麼瀏覽器沒有執行重定向頁面的獲取?

回答

4

它工作正常。後退按鈕重新執行請求之前「POST accountDetails.xhtml」,它沒有列在您的第一張截圖中,但根據第二張截圖顯然(並在邏輯上)「GET accountDetails.xhtml」。您顯然在與該視圖關聯的bean中,或者在某些篩選器中執行一些檢查並重定向到「registrationWelcome.xhtml」。第一個屏幕截圖中的「POST accountDetails.xhtml」是當前請求,該請求已被重定向到「reviewInfo.xhtml」。

後退按鈕不會重新執行重定向。這是你自己的代碼。後退按鈕也不會重新執行POST請求,這在第二個屏幕截圖中已經確認。

+0

謝謝BalusC,您說得對,「POST accountDetails.xhtml」之前的請求是「Get accountDetails.xhtml」。爲了澄清我的理解,您說後退按鈕將「POST accountDetails.xhtml - > GET reviewInfo.xhtml」視爲相同的請求(和當前請求),因此執行先前的請求「GET accountDetails.xhtml」由後退按鈕? – Paul

+1

當您從'reviewInfo.xhtml'導航出來後,在下一頁*按下後退按鈕時,後退按鈕只會重新執行'GET reviewInfo.xhtml'而不是'POST accountDetails.xhtml'。後退按鈕確實不會重新執行當前請求。刷新按鈕即可。如果沒有PRG,刷新按鈕就會重新執行POST。 – BalusC

+0

您的意思是「沒有PRG,** back **按鈕會重新執行POST。」? – Paul