308 Permanent Redirect

新しい恒久的な URL で同じリクエストを繰り返させる場合。

使いどころ

301 と同様ですが、メソッドとボディを変更してはなりません。

知っておきたいこと

308 は 307 の恒久版です。検索エンジンは 301 と同様に扱ってランキングシグナルを引き継ぎますが、メソッドとボディは変更してはいけません。POST、PUT、PATCH を受け取る API エンドポイントが完全に移転した場合に使います。ブラウザーは 301 と同じようにキャッシュするので、同じ注意が必要です。間違った 308 は、ユーザーのブラウザーに長期間残ることがあります。

Next.js は permanent 指定のリダイレクトや末尾スラッシュの正規化に 308 で応答するため、ログを見て驚く人がいます。Windows 7 の Internet Explorer 11 のような非常に古いクライアントは 308 を理解しません。そうしたクライアントにまだ対応しているなら、通常の GET ページには 301 を使ってください。308 は 301 と同様にデフォルトでキャッシュ可能なので、新しいリダイレクトをテストしている間は Cache-Control: max-age を付けましょう。

リダイレクト (3xx)

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

レスポンスでの表示

HTTP/1.1 308 Permanent Redirect

返し方

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

確認方法

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

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