iOS 6 の Safari (以前のバージョンはテストしていません) が、現在のページのフォーム入力として存在しないが、以前の POST で同じ URL に送信された値を POST データで送信している状況に遭遇しています。
シナリオは次のとおりです。
- ユーザーは、いくつかのクエリパラメーターを含むログインページの URL に送信されます。
/login?x=1,y=2
- ユーザーが間違った資格情報を入力すると、ログイン ページが再度表示され、非表示の入力としてフォーム
x
にy
埋め込まれます。 - ユーザーが GET を取得する Safari で「戻る」ボタンを押します
/login
。x
との値がy
失われ、非表示のフォーム入力として含まれなくなりました。 - ユーザーが再び間違った資格情報を入力すると、ここで奇妙なことが起こります。通過する POST データには、ユーザーが入力したばかりのユーザー名とパスワード、および以前に送信された の値が含まれていますが、 は含まれ
x
ていませんy
。この特定の Web アプリでは、x
なしの存在はy
、この特定の POST に対して無効な状態であり、エラーになります。
手順 3 で、Safari がページのキャッシュ バージョンを使用するのではなく、実際に GET を実行していることを確認しました。
それだけの価値があるため、Cache-Control 応答ヘッダーを次のように設定しています。no-cache, no-store, must-revalidate
更新: Apple にバグを報告して、Apple がこれを認識していることを確認しました。フィードバックがあれば、ここに投稿します。