どこへ案内された?
308 は「このリソースは恒久的に別の URL に移った。今後はそちらを使ってね。ただし、リクエストの方法 (GET/POST など) は変えなくていいよ」と案内するサインです。 渡り廊下で先生が「教室は永久に第二校舎へ移ったよ。ただ、授業のやり方は同じだから、そのまま続けてね」と案内してくれる——あの「引っ越し済み、でもやり方は維持」の感触に近いコードです。
301 と恒久性は同じですが、301 では実装によって POST が GET に変わることがあります。308 はメソッドとボディを保つことを明確にした、API 移行に安心して使える恒久リダイレクトです。
渡り廊下からのひとこと
校舎の建て替えで教室が引っ越しても、授業の進め方や生徒の持ち物は同じ。「教室の場所は永久に変わったけれど、いつもどおりノートを開いて、いつもどおり手を挙げてね」と先生が伝えてくれれば、生徒は迷いなく続きを始められます。
308 もまさにそれと同じ役割で、URL は永久に変わったけれど、リクエストの中身は変えない。API のドメイン移行や HTTPS 化を、メソッドを保ったまま安全に進めるための強力なリダイレクトです。
たどり着くまで
新しい場所へ、こうたどり着く:
Locationの新 URL に切り替える:以後はそちらを使うよう参照を更新- メソッドとボディは変えない:POST のまま新しい URL に再送
- キャッシュやブックマークも更新:恒久移動なので長く効く
- API 移行は 308 を基本に検討 (管理者向け):301 の曖昧さを避け、メソッド保持を保証する
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 308 Permanent Redirect
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>308 Permanent Redirect</h1></body></html>