新しい恒久的な 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 / Express | res.redirect(308, '/new-url') |
|---|---|
| Python / Flask | return redirect('/new-url', code=308) |
| nginx | return 308 https://example.com$request_uri; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/