300 Multiple Choices
Utilisation
Lorsque le code de statut 300 Multiple Choices est reçu, le contenu du corps du message diffère selon la méthode de requête. Une requête HEAD ne comporte aucun corps de message. Pour les autres méthodes, le corps contient une liste dans laquelle le client sélectionne la réponse la plus appropriée.
Pour les réponses autres que HEAD, le corps contient la liste des choix disponibles. L’en-tête Link avec rel=“alternate” est également utilisé pour identifier chaque option. S’il existe une réponse par défaut ou si le serveur a un choix préféré, l’en-tête Location signale cette préférence.
Exemple
Le client demande une ressource et le serveur propose plusieurs options. Les en-têtes contiennent les chemins vers chaque ressource. Comme il s’agit de la suite d’une requête GET, le corps fournit une liste d’options cliquables.
Requête
GET /tech-news HTTP/1.1
Host: example.com
Réponse
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>
Comportement des navigateurs
La plupart des navigateurs ne présentent pas d’interface de sélection lorsqu’ils reçoivent une réponse 300. Lorsqu’un en-tête Location est présent, les navigateurs suivent généralement l’option préférée automatiquement, de la même manière qu’une redirection 302. Sans en-tête Location, le navigateur affiche le corps de la réponse, qui contient la liste des choix disponibles. En pratique, 300 est rarement rencontré car la négociation de contenu (Content-Negotiation) gère la sélection du format de façon transparente.
Références de code
.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