次の回避策を見つけました。POST
操作してリクエストを処理した後、リダイレクトをエスケープすることができますhistory
オブジェクトことで、ます。
だからあなたはHTMLフォームを持っています:
<form method=POST action='/process.php'>
<input type=submit value=OK>
</form>
サーバーでこのフォームを処理/the/result/page
すると、次のLocation
ようにヘッダーを設定してユーザーをリダイレクトする代わりに、
$cat process.php
<?php
process POST data here
...
header('Location: /the/result/page');
exit();
?>
POST
edデータを処理した後、小さくレンダリング<script>
し、その結果/the/result/page
<?php
process POST data here
render the <script> // see below
render `/the/result/page` // OK
?>
<script>
あなたがレンダリングする必要があります。
<script>
window.onload = function() {
history.replaceState("", "", "/the/result/page");
}
</script>
結果は次のとおりです。
ご覧のとおり、フォームデータはスクリプトにPOST
編集されprocess.php
ます。
このスクリプトのプロセスは、POST
データとレンダリングエド/the/result/page
一度に持ちます:
- リダイレクトなし
POST
ページを更新しても、データはありません(F5)
POST
ブラウザーの履歴を介して前/次のページに移動するときは再
UPD
別の解決策として、私は尋ねる機能を要求するとMozilla Firefoxのセットアップへのユーザ許可するようにチームをNextPage
同じように動作しますヘッダーLocation
ヘッダーとメイクをpost/redirect/get
パターンを廃止。
要するに。サーバーがフォームPOST
データを正常に処理すると、次のようになります。
NextPage
代わりにヘッダーを設定Location
- リクエストのパターンで
POST
レンダリングするのと同じように、フォームデータの処理結果をレンダリングGET
しpost/redirect/get
ます。
NextPage
ヘッダーが表示されたブラウザー:
- 調整
window.location
とNextPage
値
- ユーザーがページを更新すると、ブラウザはデータを再形成
GET
するNextPage
代わりにリクエストをネゴシエートしPOST
ます
実装すればこれは優れていると思いませんか? =)