300 Multiple Choices
HTTP の 300 Multiple Choices
はリダイレクトレスポンスステータスコードで、リクエストに対して複数のレスポンスがあることを示します。
ユーザーエージェントやユーザーは、その内から一つを選択します。
メモ: エージェント駆動型コンテンツネゴシエーションでは、サーバーに複数の候補が存在する場合、クライアントとサーバーが共同で指定されたリソースの最適な候補を決定します。
ほとんどのクライアントは、レスポンスから自動的に選択する手段を持っていません。また、追加の往復通信により、クライアントとサーバーの対話が遅くなります。
サーバー駆動型コンテンツネゴシエーションの方がはるかに広く使用されており、サーバーはリクエストヘッダー(Accept-Language
、Accept
など)に基づいて、クライアントに最も適したリソースを選べます。
サーバーは、ユーザーまたはユーザーエージェントが選択できるリソースメタデータと URI のリストを含むコンテンツをレスポンスに含めるべきです。コンテンツの形式は実装に依存しますが、ユーザーエージェントによって簡単に解析できる形式(HTML や JSON など)であるべきです。
サーバーが推奨する選択肢がある場合は、 Location
ヘッダーを生成してください。
ステータス
300 Multiple Choices
例
リソースのリストがついた 300 レスポンス
次の例は、透過的コンテンツネゴシエーションのリクエストとレスポンスのやり取りを示しています。
Apache サーバーは、型マップで定義されたリソースの複数の版を、入力する言語に応じて、英語のコンテンツには index.html.en
、フランス語のコンテンツには index.html.fr
というように提供します。
URI: index.html.en Content-Language: en URI: index.html.fr Content-Language: fr
Negotiate: trans
リクエストヘッダーは、クライアントが TCN を使用してリソースを選べます。
このメカニズムに対応するブラウザーが少ないということは、代わりに curl などのユーザーエージェントが使用されているということになります。
curl -v -H "Negotiate: trans" http://localhost/index
これは、次のリクエストを生成します。
GET /index HTTP/1.1
Host: localhost
User-Agent: curl/8.7.1
Accept: */*
Negotiate: trans
リクエストされたリソースのさまざまな表現の詳細とともに、 300
のレスポンスを受け取ります。
HTTP/1.1 300 Multiple Choices
Date: Fri, 30 Aug 2024 09:21:48 GMT
Server: Apache/2.4.59 (Unix)
Alternates: {"index.html.en" 1 {type text/html} {language en} {length 48}}, {"index.html.fr" 1 {type text/html} {language fr} {length 45}}
Vary: negotiate,accept-language
TCN: list
Content-Length: 419
Content-Type: text/html; charset=iso-8859-1
<html><head>
<title>300 Multiple Choices</title>
</head><body>
<h1>Multiple Choices</h1>
Available variants:
<ul>
<li><a href="index.html.en">index.html.en</a> , type text/html, language en</li>
<li><a href="index.html.fr">index.html.fr</a> , type text/html, language fr</li>
</ul>
</body></html>
仕様書
Specification |
---|
HTTP Semantics # status.300 |