Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

300 Multiple Choices

Le code de statut de réponse de redirection HTTP 300 Multiple Choices indique que la requête a plusieurs réponses possibles. L'agent utilisateur ou l'utilisateur·ice doit en choisir une.

Note : Lors de la négociation de contenu pilotée par l'agent, un client et un serveur décident ensemble de la meilleure variante d'une ressource donnée lorsque le serveur possède plusieurs variantes. La plupart des clients n'ont pas de méthode pour choisir automatiquement parmi les réponses, et les allers-retours supplémentaires ralentissent l'interaction client-serveur. La négociation de contenu pilotée par le serveur est bien plus courante, le serveur choisissant la ressource la plus appropriée pour le client en fonction des en-têtes de la requête (Accept-Language, Accept, etc.).

Le serveur doit inclure dans la réponse un contenu contenant une liste de métadonnées de ressources et d'URI parmi lesquels l'utilisateur·ice ou l'agent utilisateur peut choisir. Le format du contenu dépend de l'implémentation, mais doit pouvoir être facilement analysé par l'agent utilisateur (comme du HTML ou du JSON).

Si le serveur a un choix préféré que le client doit demander, il peut l'indiquer dans un en-tête Location.

Statut

http
300 Multiple Choices

Exemples

Réponse 300 avec liste de ressources

L'exemple suivant illustre un échange requête-réponse de négociation de contenu transparente. Un serveur Apache propose plusieurs variantes d'une ressource définie dans une carte de types (angl.) ; index.html.en pour une ressource en anglais, et index.html.fr pour une version française :

http
URI: index.html.en
Content-Language: en

URI: index.html.fr
Content-Language: fr

Un en-tête de requête Negotiate: trans indique que le client souhaite utiliser TCN pour choisir une ressource. Le faible support de ce mécanisme par les navigateurs signifie qu'un agent utilisateur comme curl doit être utilisé à la place :

bash
curl -v -H "Negotiate: trans" http://localhost/index

Cela produit la requête suivante :

http
GET /index HTTP/1.1
Host: localhost
User-Agent: curl/8.7.1
Accept: */*
Negotiate: trans

On reçoit une réponse 300 avec les détails des différentes représentations de la ressource demandée :

http
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>Choix multiples</h1>
Variantes disponibles&nbsp;:
<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>

Spécifications

Specification
HTTP Semantics
# status.300

Voir aussi