300 Multiple Choices
Verwendung
Wenn der Statuscode 300 Multiple Choices empfangen wird, unterscheidet sich der Inhalt des Nachrichten-Bodys je nach Anfragemethode. Eine HEAD-Anfrage enthält keinen Nachrichten-Body. Bei anderen Methoden enthält der Body eine Liste, aus der der Client die am besten geeignete Antwort auswählt.
Bei Antworten auf andere Methoden als HEAD enthält der Body die Liste der verfügbaren Auswahlmöglichkeiten. Zusätzlich wird der Link-Header mit rel=“alternate” verwendet, um jede Option zu kennzeichnen. Existiert eine Standardantwort oder hat der Server eine bevorzugte Auswahl, kennzeichnet der Location-Header diese Präferenz.
Beispiel
Der Client fordert eine Ressource an, und der Server bietet mehrere Optionen an. Die Header enthalten die Pfade zu jeder Ressource. Da dies auf eine GET-Anfrage folgt, liefert der Body eine anklickbare Liste der Optionen.
Anfrage
GET /tech-news HTTP/1.1
Host: example.com
Antwort
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>
Browserverhalten
Die meisten Browser bieten beim Empfang einer 300-Antwort keine Auswahloberfläche an. Ist ein Location-Header vorhanden, folgen Browser der bevorzugten Option in der Regel automatisch, ähnlich wie bei einer 302-Weiterleitung. Ohne Location-Header rendert der Browser den Antwort-Body, der die Liste der verfügbaren Auswahlmöglichkeiten enthält. In der Praxis begegnet einem 300 selten, da die Inhaltsaushandlung (Content-Negotiation) die Formatauswahl transparent handhabt.
Code-Referenzen
.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