解決的問題
讓我們思考這樣一個常見的場景
- Step 1: 用戶提交了一個表單
- Step 2: 服務器返回了一個頁面
- Step 3: 用戶刷新頁面
問題產生: 此時表單將被重複提交
如果服務器沒有正確處理,將引起一些不必要的問題
注意:這裡說的提交表單不是用 ajax 異步請求把數據傳到服務器,而是原生的 HTML form 的 submit,不要混淆該模式的使用場景,否則會對該模式產生困惑
原生的表提交場景下,提交後展示的頁面是後端返回的提交結果頁面 !!!
解決途徑: Post/Redirect/Get (PRG)
服務器收到 form 提交的 Post 請求後,並不是直接返回一個 2XX 的結果頁面,而是返回一個 3XX 的重定向頁面 (Redirect),定向到正確的結果頁面 (Get)
更多參考
- 示例代碼:https://gist.github.com/ZhenningLang/342bf9d0ddfcf9a6d4ed9c10f97e8b7a
- Wikipedia:https://en.wikipedia.org/wiki/Post/Redirect/Get
閱讀更多 CrazyPython 的文章