HTTP 302は、対象を一時的に別のURIで参照するよう案内する応答です。画面が移動したことだけでなく、転送先と次の要求のメソッドを確認すると、APIやログイン処理の調査に役立ちます。
この記事では302の意味を、303・307との違いとともに整理します。
302では転送先をLocationで読む
302 Foundは一時的な移動を表し、サーバーは転送先のURIをLocationヘッダーで案内します。RFC 9110の302の定義
ブラウザが自動で転送をたどると、最初の302より最後の応答が目に入りやすくなります。調査では最初の要求と転送後の要求を別々に記録します。
| 段階 | 確認する内容 |
|---|---|
| 最初の要求 | URL、メソッド、送信内容の種類 |
| 302応答 | Locationの指すURI |
| 次の要求 | 実際の送信先、メソッド、応答コード |
| 最終結果 | 目的の画面や処理結果になったか |
POSTがそのまま転送されるとは限らない
302では、歴史的な経緯から、利用者側がPOSTをGETへ変更して次の要求を行うことが認められています。メソッドを維持した一時転送を明示するコードは307です。303は別のURIで結果を参照することを案内します。RFC 9110の転送コード
| コード | 整理する観点 |
|---|---|
| 302 | 一時転送。POST後のメソッドが変わり得る |
| 303 | 結果を別のURIで取得する案内 |
| 307 | 自動転送で要求メソッドを変更しない |
番号の選び方と、実際に使うクライアントの挙動を照合してください。302なら必ずGETになる、あるいは必ず元の本文を送る、という前提にはしません。
仮例:登録後の画面遷移を調べる
注文登録のPOSTの後で302が返り、一覧画面へ移動した場面を考えます。一覧が見えたことと、登録が一度だけ確定したことは別の確認です。
登録処理の応答、Location、次のGET、登録結果の識別子を対応づければ、画面移動と業務処理を分けて追えます。画面が戻ったからといって、元のPOSTを無条件に再送しないことが大切です。
転送の連鎖と転送先の範囲を確認する
同じURLを行き来する場合は、要求ごとのLocationを並べ、どこで循環しているか確認します。HTTPからHTTPSへの誘導、ログイン画面への移動、アプリ内の遷移を一緒に扱わないようにします。
外部ドメインへ移る場合には、そこへ送るべき情報を確認します。認証情報を含む要求を、転送だからという理由だけで任意の宛先へ引き継ぐ運用にはしません。
APIの契約と実際の応答をそろえる
転送が意図どおりかは、URIだけでなくメソッドと業務結果で確認します。API設計の進め方にある操作の契約と対応させ、利用側にも転送条件を伝えましょう。
最初に一連の要求を記録し、どこへ、何のメソッドで移り、何が完了したかを説明できる状態にすることが有効です。