HTTP 307 Temporary Redirect
厳密な一時的リダイレクト: 別の URL に移動し、送信したリクエストをそのまま繰り返します。
HTTP 307 の意味
HTTP 307 Temporary Redirect は 302 と同様に機能しますが、1 つ保証が追加されています: クライアントは同じメソッドとボディで新しい URL にリクエストを繰り返さなければなりません。リダイレクトされた POST は POST のままです — 何も密かに GET に変換されません。
ブラウザは 307 を内部的にも生成します: サイトが HSTS プリロードリストに含まれている場合、ブラウザ自身が http:// を https:// にアップグレードし、DevTools 上でネットワークリクエストなしに「307 Internal Redirect」と表示します。
307 レスポンスのよくある原因
- API が POST/PUT リクエストを別のエンドポイントに一時的にリダイレクトしています。
- HSTS: ブラウザが内部的に http:// を https:// にアップグレードしています(DevTools では 307 と表示されます)。
- 負荷分散やメンテナンス期間により、書き込みがスタンバイのエンドポイントに転送されています。
開発者向けの推奨プラクティス
- リダイレクトされたリクエストのボディがホップを越えて維持されなければならない場合は、常に 307 を使用してください。
- 恒久的でメソッドを維持する移動には、代わりに 308 を使用してください。
- クライアントはボディ全体を再送信することを忘れないでください — 事前に正しい URL をクライアントに知らせられる場合は、非常に大きなアップロードに 307 を使うのは避けてください。
レスポンス例
HTTP/1.1 307 Temporary Redirect Location: https://api.example.com/v2/orders Retry-After: 0
よくある質問
302 と 307 の違いは何ですか?
どちらも一時的ですが、307 はリクエストメソッドの変更を禁じます — POST は POST として繰り返されます。302 では、ブラウザが歴史的に GET に切り替えることがあります。
なぜ DevTools に「307 Internal Redirect」と表示されるのですか?
ブラウザがサーバーに接続することなく、リクエストを自らHTTPS にアップグレードしました(HSTS)。これは合成された 307 として表示されます。
307 の恒久版はありますか?
はい — 308 Permanent Redirect です: 同じメソッド維持のルールを持ちますが、キャッシュや検索エンジンはその移動を恒久的なものとして扱います。