HTTPQUERY
Français

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