どこへ案内された?
300 は「該当する場所が複数あるから、どれにするか君が選んでね」というサインです。 渡り廊下に立った先生が、「3年A組と3年B組のどちらにも今日の授業はあるよ。どっちに行くか自分で決めてね」と道を示してくれる——あの「選んでください」の感触に似ています。
実際の Web で 300 を見ることは多くありません。多くのサーバーは候補の中から自動で 1 つを選んで 200 か 301/303 を返してしまうからです。300 は「自動で決めず、クライアントに判断を委ねたい」場面のためのコードと言えます。
渡り廊下からのひとこと
放課後、渡り廊下に貼られた案内板に「美術部は西校舎、書道部は北校舎」のように複数の行き先が書いてあることがあります。先生は「どっちに用があるか自分で確認してね」と一言添えるだけ。それで生徒は自分で選び、自分の足で動けます。
300 もそれと同じ姿勢です。サーバーが押し付けず、選択肢を並べて見せる。レスポンス本文には候補の URL がリンクで列挙されることが多く、クライアント (人または自動処理) が状況に応じて選びます。
たどり着くまで
新しい場所へ、こうたどり着く:
- 応答本文の候補リストを確認:URL や形式の違いを見て、用途に合うものを選ぶ
Locationヘッダがあれば優先案として参照:サーバーのおすすめが入っていることがある- ユーザーに選んでもらう UI を出す:自動判定が難しいときは人の判断に委ねる
- そもそも 300 が必要か再検討 (管理者向け):自動選択で済むなら 200/303 のほうが利用者に優しい
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 300 Multiple Choices
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>300 Multiple Choices</h1></body></html>