HTTPQUERY
Deutsch

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