300 Multiple Choices
使い方
300 Multiple Choices ステータスコードを受け取ったとき、メッセージボディの内容はリクエストメソッドによって異なります。HEAD リクエストにはメッセージボディが含まれません。その他のメソッドでは、ボディにはクライアントが最も適切なレスポンスを選択するための一覧が含まれます。
HEAD 以外のレスポンスでは、ボディに選択可能な候補の一覧が含まれます。各選択肢を識別するために rel=“alternate” を伴う Link ヘッダーも使われます。デフォルトのレスポンスが存在する場合やサーバーに推奨する選択肢がある場合、Location ヘッダーがその推奨を示します。
例
クライアントがリソースを要求し、サーバーは複数の選択肢を提示します。ヘッダーには各リソースへのパスが含まれます。これは GET リクエストに続くものであるため、ボディにはクリック可能な選択肢の一覧が示されます。
リクエスト
GET /tech-news HTTP/1.1
Host: example.com
レスポンス
HTTP/1.1 300 Multiple Choices
Link: </leading/news.html>; rel="alternate"
Link: </bleeding/news.html>; rel="alternate"
Location: </leading/news.html>
Content-Type: text/html
Content-Length: 164
<h2>Choose from one of the following</h2>
<ul>
<li><a href=/leading/news.html>Leading edge</a>
<li><a href=/bleeding/news.html>Bleeding edge</a>
</ul>
ブラウザの挙動
ほとんどのブラウザは 300 レスポンスを受け取っても選択用のインターフェイスを提示しません。Location ヘッダーが存在する場合、ブラウザは通常、302 リダイレクトと同様に推奨された選択肢を自動的に辿ります。Location ヘッダーがない場合、ブラウザは選択可能な候補の一覧を含むレスポンスボディをレンダリングします。実際には、コンテントネゴシエーションが形式の選択を透過的に処理するため、300 に遭遇することはまれです。
コードリファレンス
.NET
HttpStatusCode.MultipleChoices
Rust
http::StatusCode::MULTIPLE_CHOICES
Rails
:multiple_choices
Go
http.StatusMultipleChoices
Symfony
Response::HTTP_MULTIPLE_CHOICES
Python3.5+
http.HTTPStatus.MULTIPLE_CHOICES
Java
java.net.HttpURLConnection.HTTP_MULT_CHOICE
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_MULTIPLE_CHOICES
Angular
@angular/common/http/HttpStatusCode.MultipleChoices