307 Temporary Redirect

別の URL で同じリクエストを繰り返させる場合。

使いどころ

メソッドとボディを維持しなければならない一時的なリダイレクト。

知っておきたいこと

307 は、クライアントが新しい URL に同じメソッドとボディで再リクエストすることを保証するため、POST は POST のままです。そのため、API エンドポイントを一時的に移動するのに適しています。HSTS が有効な場合は、Chrome DevTools に「内部」の 307 も表示されます。ブラウザーがサーバーに問い合わせずに自ら http:// を https:// にアップグレードしたもので、Non-Authoritative Reason: HSTS と表示されます。

検索エンジンは 307 を 302 と同じく一時的なものとして扱い、ブラウザーは明示的なヘッダーがなければキャッシュしません。ボディは再送可能でなければなりません。ストリーミングの ReadableStream をボディにした fetch は 307 をたどれず、失敗します。ブラウザーと curl は、リダイレクト先が別のホストになると Authorization ヘッダーを落とします。curl がこれを保持するのは --location-trusted を付けた場合だけです。curl -L を使えばリダイレクトをたどり、メソッドも自動的に維持されます。

リダイレクト (3xx)

3xx はリダイレクトです。リクエストを完了するには、クライアントが別の場所へ移動するか、キャッシュしたコピーを使う必要があります。

レスポンスでの表示

HTTP/1.1 307 Temporary Redirect

返し方

Node.js / Expressres.redirect(307, '/new-url')
Python / Flaskreturn redirect('/new-url', code=307)
nginxreturn 307 https://example.com$request_uri;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く