どこへ案内された?
307 は「いまだけ別の場所に行ってほしい。ただし、リクエストの方法 (GET/POST など) は変えないでね」と案内するサインです。 渡り廊下で先生が「今日だけ別の教室で同じ授業をやるよ。授業内容は同じだから、そのまま続けてね」と案内してくれる——あの「やり方は変えず、場所だけ違う」感触に似ています。
302 と意味は近いですが、決定的に違うのが「メソッドの扱い」です。302 では多くの実装で POST→GET に変わってしまいますが、307 は仕様としてメソッドを保つことを明確にしています。POST/PUT/DELETE を保ったまま振り替えたいときに頼れます。
渡り廊下からのひとこと
プログラム内容を変えずに、教室だけ別のところに移したい——そんなときに先生は「同じ持ち物、同じやり方で、向こうの教室に行ってね」と案内します。書きかけのノートも、そのまま使う。続きが断絶しない移動が大切です。
307 はその思想を反映した一時リダイレクトで、リクエストボディもメソッドもそのまま運ばれます。302 が抱えていた曖昧さを解消し、API でも安心して使えるシンプルな振り替えサインになっています。
たどり着くまで
案内に従うときの一歩:
LocationのURLへ同じメソッドで再送:POST なら POST のまま、ボディもそのまま- 元の URL は記憶しておく:恒久ではないので参照は残す
- 冪等性を意識した API 設計:再送時の重複処理に備える
- 保守期間中などは 307 で安全に振替 (管理者向け):302 の曖昧さを避けたいときに有効
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 307 Temporary Redirect
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>307 Temporary Redirect</h1></body></html>