Accueil·Codes et en-têtes HTTP

132 codes de statut et en-têtes HTTP

Ce que veulent dire 404 et 500, et ce que font Content-Type ou Cache-Control — une ligne chacun.

Codes de statut

1xx Information4

Une note d'avancement ; la vraie réponse suit.

2xx Succès10

La requête a abouti.

3xx Redirection7

Allez ailleurs — la différence tient au caractère permanent ou temporaire.

4xx Erreur client29

Le problème vient de la requête ; la renvoyer telle quelle échouera encore.

400 Bad RequestLa requête est mal formée et illisible.401 UnauthorizedVous ne vous êtes pas identifié ; se connecter règle en général le problème.402 Payment RequiredPaiement requis : prévu par la norme mais rarement utilisé.403 ForbiddenLe serveur sait qui vous êtes et refuse quand même ; se connecter n'y changera peut-être rien.404 Not FoundRien à cette adresse : l'URL est fausse ou la page a disparu.405 Method Not AllowedL'adresse existe mais n'accepte pas cette méthode.406 Not AcceptableLe serveur ne peut pas fournir le format demandé.407 Proxy Authentication RequiredUn proxy intermédiaire exige d'abord une authentification.408 Request TimeoutLe serveur a attendu, la requête n'est jamais arrivée entièrement.409 ConflictLa requête entre en conflit avec l'état actuel : typique de deux modifications simultanées.410 GoneSupprimé volontairement et sans retour : un adieu plus net qu'un 404.411 Length RequiredLa requête doit indiquer la longueur du corps, ce qu'elle n'a pas fait.412 Precondition FailedUne condition jointe à la requête n'était pas remplie.413 Content Too LargeLe corps envoyé dépasse la taille acceptée par le serveur.414 URI Too LongL'URL est trop longue : souvent trop de paramètres accumulés.415 Unsupported Media TypeLe serveur ne gère pas le type de contenu envoyé.416 Range Not SatisfiableLa plage demandée se situe hors du fichier.417 Expectation FailedL'attente exprimée dans l'en-tête Expect ne peut être satisfaite.418 I'm a teapotUn code humoristique : la théière refuse de faire du café.421 Misdirected RequestCe serveur n'est pas celui qui doit répondre.422 Unprocessable ContentLa syntaxe est correcte mais le contenu enfreint les règles.423 LockedLa ressource est verrouillée.424 Failed DependencyUne requête précédente a échoué, celle-ci ne peut donc aboutir.425 Too EarlyLe serveur refuse de traiter une requête peut-être rejouée.426 Upgrade RequiredIl faut passer à un autre protocole pour continuer.428 Precondition RequiredLa requête doit porter une condition : c'est ainsi qu'on évite les écrasements.429 Too Many RequestsTrop de requêtes ; Retry-After indique quand réessayer.431 Request Header Fields Too LargeLes en-têtes sont trop volumineux : souvent des cookies accumulés.451 Unavailable For Legal ReasonsBloqué pour raisons légales ; le nombre renvoie au roman Fahrenheit 451.

5xx Erreur serveur11

Le problème vient du serveur ; réessayer plus tard en vaut souvent la peine.

En-têtes

En-têtes de requête28

En-têtes ajoutés par le navigateur à l'envoi.

AcceptIndique les formats acceptés par le client.Accept-EncodingIndique les compressions comprises ; gzip ou br réduisent beaucoup le transfert.Accept-LanguageDéclare les langues préférées ; les sites multilingues s'en servent.AuthorizationPorte les identifiants prouvant qui vous êtes : jeton ou identifiant et mot de passe.CookieRenvoie les cookies posés précédemment par le serveur.HostNomme le domaine visé : c'est ce qui permet à un serveur d'héberger plusieurs sites.If-Modified-SinceNe demande la ressource que si elle a changé depuis.If-None-MatchNe demande la ressource que si son ETag diffère : ainsi le cache se revalide.OriginIndique l'origine de la requête ; ajouté par le navigateur, il fonde les décisions CORS.RangeNe demande qu'une partie du fichier : base de la reprise et du déplacement vidéo.RefererIndique la page d'où l'on vient ; la faute d'orthographe est passée dans la norme.User-AgentDécrit le navigateur et l'appareil ; ces chaînes relèvent surtout du camouflage.Sec-Fetch-DestPrécise l'usage de la requête : image, script, document.Sec-Fetch-ModeIndique si la requête est de même origine, CORS ou navigation.Sec-Fetch-SiteDit si la requête vient du même site ou d'un autre.DNTDemande à ne pas être suivi ; sans force contraignante, souvent ignoré.ExpectInterroge le serveur avant d'envoyer un corps volumineux.ForwardedConserve les informations d'origine après passage par des proxys.FromContient l'e-mail de l'auteur de la requête ; les robots s'en servent comme contact.If-MatchN'agir que si l'ETag correspond : évite d'écraser le travail d'autrui.If-RangeReprendre si le fichier n'a pas changé, sinon tout recommencer.Max-ForwardsLimite le nombre de proxys traversés.Proxy-AuthorizationIdentifiants destinés au proxy, non au serveur d'origine.TEIndique les encodages de transfert acceptés.Upgrade-Insecure-RequestsDemande au serveur de passer les liens http en https.X-Forwarded-ForTransporte l'IP d'origine à travers les proxys ; non normalisé mais très répandu.X-Forwarded-ProtoIndique si la requête initiale est arrivée en http ou https.X-Requested-WithUne vieille convention marquant les requêtes issues de JavaScript.

En-têtes de réponse30

En-têtes ajoutés par le serveur à la réponse.

Access-Control-Allow-OriginNomme les origines autorisées à lire la réponse : le cœur de CORS.Access-Control-Allow-MethodsListe les méthodes autorisées en requête cross-origine.Access-Control-Allow-HeadersListe les en-têtes autorisés en requête cross-origine.Access-Control-Allow-CredentialsDétermine si les requêtes cross-origine peuvent porter des cookies.Access-Control-Max-AgeIndique la durée de mise en cache du préflight.AgeDepuis combien de temps la réponse est en cache.AllowListe les méthodes acceptées ; accompagne un 405.Content-DispositionDécide de l'affichage ou du téléchargement et porte le nom du fichier.Content-Security-PolicyContrôle l'origine autorisée des scripts et images : la barrière contre le XSS.ETagUne empreinte de cette version : le contenu change, l'étiquette aussi, et le cache le voit.ExpiresIndique l'instant après lequel la réponse est périmée.Last-ModifiedDate de dernière modification ; référence des requêtes conditionnelles.LocationL'adresse suivante ; accompagne les redirections et le 201.Permissions-PolicyContrôle quels documents peuvent utiliser caméra, micro ou position.Referrer-PolicyDétermine la quantité d'information de provenance transmise.Retry-AfterIndique quand réessayer ; accompagne un 429 ou un 503.ServerIndique le logiciel serveur ; trop de détails renseigne les attaquants.Set-CookieDépose un cookie dans le navigateur ; HttpOnly et Secure le sécurisent.Strict-Transport-SecurityImpose au navigateur d'accéder désormais au site en https.Timing-Allow-OriginAutorise une autre origine à lire les mesures de performance.VaryNomme les en-têtes qui font varier la réponse ; les caches s'y fient.WWW-AuthenticateIndique le schéma d'authentification ; accompagne un 401.X-Content-Type-OptionsEmpêche le navigateur de deviner un autre type de contenu.X-Frame-OptionsEmpêche d'autres sites d'intégrer cette page dans un cadre.X-XSS-ProtectionActivait un ancien filtre XSS ; le CSP l'a remplacé.Cross-Origin-Opener-PolicyIsole le contexte pour que d'autres origines ne gardent pas la fenêtre.Cross-Origin-Resource-PolicyPrécise quelles origines peuvent charger cette ressource.Cross-Origin-Embedder-PolicyExige que les ressources tierces intégrées donnent leur accord.Content-RangeIndique la portion envoyée du tout ; accompagne un 206.Accept-RangesIndique si les requêtes par plage sont acceptées ; bytes permet la reprise.

Dans les deux sens13

En-têtes pouvant figurer des deux côtés.

Comment lire

  • Le premier chiffre du code porte le sens : 4 désigne la requête, 5 le serveur.
  • 404 veut dire « absent » ; 403, « présent mais interdit ». Les confondre rallonge le débogage.
  • Les noms d'en-tête sont insensibles à la casse : Content-Type et content-type sont identiques.
  • Les soucis de cache et de CORS tiennent souvent à une ligne d'en-tête, visible dans l'onglet réseau.

Questions fréquentes

Q. Quelle différence entre 404 et 403 ?

404 dit qu'il n'y a rien à cette adresse ; 403 dit qu'il y a quelque chose, mais pas pour vous. Certains serveurs renvoient volontairement 404 pour masquer l'existence même de la ressource.

Q. Puis-je faire quelque chose face à un 500 ?

Les codes commençant par 5 relèvent du serveur : le plus souvent, il ne reste qu'à attendre. Un 502 ou un 504 se situe entre deux serveurs et se résout souvent en réessayant peu après.

Q. Comment choisir entre 301 et 302 ?

301 quand l'adresse a changé définitivement, 302 pour un détour temporaire. Navigateurs et moteurs retiennent longtemps un 301 : difficile de revenir en arrière.

Q. Les noms d'en-tête sont-ils sensibles à la casse ?

Non. Content-Type et content-type désignent le même en-tête, et depuis HTTP/2 ils circulent en minuscules par définition.

Q. Pourquoi les erreurs CORS surviennent-elles ?

Quand une page tente de lire une réponse d'une autre origine, le navigateur bloque, sauf autorisation du serveur via Access-Control-Allow-Origin. Le serveur a bien répondu : c'est le navigateur qui refuse de transmettre le corps à votre code, d'où une réponse visible dans l'onglet réseau mais illisible par le script.