Slate Errors

Redirection (3xx)

300

Multiple Choices

— 選択肢が複数あります

まずは確認: よくある原因 TOP3

  1. コンテンツネゴシエーションで候補が複数
    言語や形式の違うバリエーションが選ばれずに残った
  2. 同じ意味の異なる URL が並ぶ場面
    クライアントに「どれを使う?」と委ねる構成
  3. 自動選択を避けたい設計
    ユーザーに明示的に選んでもらいたいケース

どこへ案内された?

300 は「該当する場所が複数あるから、どれにするか君が選んでね」というサインです。 渡り廊下に立った先生が、「3年A組と3年B組のどちらにも今日の授業はあるよ。どっちに行くか自分で決めてね」と道を示してくれる——あの「選んでください」の感触に似ています。

実際の Web で 300 を見ることは多くありません。多くのサーバーは候補の中から自動で 1 つを選んで 200 か 301/303 を返してしまうからです。300 は「自動で決めず、クライアントに判断を委ねたい」場面のためのコードと言えます。

渡り廊下からのひとこと

放課後、渡り廊下に貼られた案内板に「美術部は西校舎、書道部は北校舎」のように複数の行き先が書いてあることがあります。先生は「どっちに用があるか自分で確認してね」と一言添えるだけ。それで生徒は自分で選び、自分の足で動けます。

300 もそれと同じ姿勢です。サーバーが押し付けず、選択肢を並べて見せる。レスポンス本文には候補の URL がリンクで列挙されることが多く、クライアント (人または自動処理) が状況に応じて選びます。

たどり着くまで

新しい場所へ、こうたどり着く:

  1. 応答本文の候補リストを確認:URL や形式の違いを見て、用途に合うものを選ぶ
  2. Location ヘッダがあれば優先案として参照:サーバーのおすすめが入っていることがある
  3. ユーザーに選んでもらう UI を出す:自動判定が難しいときは人の判断に委ねる
  4. そもそも 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>

似ているケース

もっと知りたい