En-têtes HTTP

Les en-têtes HTTP permettent au client et au serveur de transmettre des informations supplémentaires avec la requête ou la réponse. Un en-tête est constitué de son nom (insensible à la casse) suivi d'un deux-points :, puis de sa valeur. Les espaces avant la valeur sont ignorés.

Des en-têtes propriétaires personnalisés peuvent être ajoutés en utilisant le préfixe X-, mais cette convention a été dépréciée en juin 2012, en raison des inconvénients qu'elle a présentés lorsque des champs non standard sont devenus standard dans RFC 6648 ; les autres en-têtes possibles sont listés dans une liste IANA et ont été définis dans la RFC 4229. IANA maintient également une liste des propositions de nouveaux en-têtes HTTP.

Les en-têtes peuvent être groupés selon leur contexte :

Les en-têtes de requête

Contiennent des informations additionnelles à propos de la ressource à récupérer ou à propos du client qui la demande.

Les en-têtes de réponse

Contiennent des informations supplémentaires au sujet de la réponse (par exemple son emplacement), ou au sujet du serveur qui la fournit.

Les en-têtes de représentation

Contiennent des informations à propos du corps de la ressource, comme son type MIME, ou le type de compression ou d'encodage appliqué.

Les en-têtes de charge utile (payload headers)

Contiennent des informations indépendantes de la représentation sur la charge utile, comme la longueur du contenu ou l'encodage utilisé pour le transport.

Les en-têtes peuvent aussi être groupés selon comment ils sont traités par les serveurs mandataires (proxies) :

En-têtes de bout en bout (end-to-end headers)

Ces en-têtes doivent être transmis au destinataire final du message ; c'est-à-dire le serveur dans le cas d'une requête ou le client dans le cas d'une réponse. Les serveurs mandataires intermédiaires doivent retransmettre les en-têtes de bout en bout sans modification et doivent les mettre en cache.

En-têtes de point à point (hop-by-hop headers)

Ces en-têtes n'ont de sens que pour une unique connexion de la couche transport et ne doivent pas être retransmis par des serveurs mandataires ou mis en cache. Seuls des en-têtes point à point peuvent être définis avec l'en-tête Connection.

Authentification

WWW-Authenticate

Définit la méthode d'authentification qui doit être utilisée pour obtenir l'accès à la ressource.

Authorization

Contient les informations d'authentification pour authentifier un agent utilisateur avec un serveur.

Proxy-Authenticate

Définit la méthode d'authentification qui doit être utilisée pour obtenir la ressource derrière un serveur mandataire.

Proxy-Authorization

Contient les informations d'authentification nécessaires pour authentifier un agent utilisateur avec un serveur mandataire.

Mise en cache

Age

La durée en secondes pendant laquelle un objet a été dans le cache d'un serveur mandataire.

Cache-Control

Spécifie des directives pour les mécanismes de mise en cache dans les requêtes et les réponses.

Clear-Site-Data

Nettoie les données de navigation (par exemple, les cookies, le stockage local et le cache) associé au site qui envoie la réponse.

Expires

La date et l'heure après lesquelles la réponse est considérée comme périmée.

En-têtes conditionnels

Last-Modified

La date à laquelle la ressource a été modifiée pour la dernière fois. Cette date est utilisée pour comparer plusieurs versions d'une même ressource. Moins précise qu'ETag, elle est plus simple à calculer dans certains environnements. Les requêtes conditionnelles avec If-Modified-Since et If-Unmodified-Since utilisent cette valeur pour modifier le comportement de la requête.

ETag

Une chaîne de caractères unique qui identifie la version de la ressource. Les requêtes conditionnelles avec If-Match et If-None-Match utilisent cette valeur pour modifier le comportement de la requête.

If-Match

Rend la requête conditionnelle et applique la méthode uniquement si la ressource enregistrée correspond à l'un des ETag donnés.

If-None-Match

Rend la requête conditionnelle et applique la méthode uniquement si la ressource enregistrée ne correspond pas à l'un des ETag donnés. Cet en-tête est utilisé afin de mettre à jour les caches (pour les requêtes sûres) ou pour empêcher de téléverser une nouvelle ressource lorsqu'une équivalente existe déjà.

If-Modified-Since

Rend la requête conditionnelle pour que la ressource ne soit transmise que si elle a été modifiée après une date donnée. Cet en-tête est utilisé pour transmettre des données uniquement lorsque le cache est périmé.

If-Unmodified-Since

Rend la requête conditionnelle pour que la ressource ne soit transmise que si elle n'a pas été modifiée après une date donnée. Cela permet de s'assurer de la cohérence d'un nouveau fragment d'un intervalle donné avec les anciens fragments, ou d'implémenter un système de contrôle concurrent optimiste pour la mise à jour de documents existants.

Vary

Indique les en-têtes de requêtes qui ont influencé la fourniture de la réponse (entre une éventuelle version en cache et une version fraîche).

Gestion de la connexion

Connection

Contrôle si la connexion réseau reste ouverte après que la transaction actuelle a fini.

Keep-Alive

Contrôle la durée pendant laquelle une connexion persistente devrait rester ouverte.

Négociation de contenu

Pour plus d'informations à ce sujet, voir l'article sur la négociation de contenu.

Accept

Indique au serveur les types MIME qui peuvent être renvoyés pour le type de contenu de la réponse.

Accept-Encoding

L'algorithme d'encodage, généralement un algorithme de compression, qui peut être utilisé pour la ressource renvoyée.

Accept-Language

Indique au serveur la ou les langues dans lesquelles la ressource peut être renvoyée. Il s'agit d'une indication et cette valeur n'est pas nécessairement choisie par la personne. Il appartient au serveur de veiller à ne pas outrepasser des choix de locale explicites effectués par ailleurs (par exemple le choix d'une langue dans une liste déroulante).

Contrôles

Expect

Indique les conditions à respecter par le serveur pour gérer correctement la requête.

Max-Forwards

Lorsque la méthode TRACE est utilisée, cet en-tête indique le nombre maximal de sauts que la requête peut effectuer avant de revenir à l'émetteur.

Cookies

Contient les cookies HTTP enregistrés, précédemment envoyés par le serveur avec l'en-tête Set-Cookie.

Envoie des cookies de la part du serveur vers l'agent utilisateur.

CORS

Pour plus d'informations, voir la documentation CORS.

Access-Control-Allow-Credentials

Indique si les informations d'authentification peuvent être exposées lors d'une requête vers une autre origine.

Access-Control-Allow-Headers

Utilisé dans une réponse à une requête préparatoire (preflight request) pour indiquer les en-têtes HTTP qui peuvent être utilisés lors de la requête réelle.

Access-Control-Allow-Methods

Utilisé dans une réponse à une requête préparatoire (preflight request) pour indiquer les méthodes HTTP qui peuvent être utilisés lors de la requête réelle.

Access-Control-Allow-Origin

Indique si la réponse peut être partagée.

Access-Control-Expose-Headers

Indique la liste des en-têtes qui peuvent être exposés dans la réponse.

Access-Control-Max-Age

Indique la durée pendant laquelle le résultat d'une requête préparatoire peut être mis en cache.

Access-Control-Request-Headers

Utilisé lors de l'émission d'une requête préparatoire pour indiquer au serveur les en-têtes HTTP qui seront utilisés lors de la requête réelle.

Access-Control-Request-Method

Utilisé lors de l'émission d'une requête préparatoire pour indiquer au serveur la méthode HTTP qui sera utilisée lors de la requête réelle.

Origin

Indique l'origine de la requête.

Timing-Allow-Origin

Indique les origines autorisées à consulter les valeurs des attributs récupérés grâce à l'API Resource Timing (au lieu que 0 soit fourni comme valeur par défaut en raison des restrictions entre les origines).

Téléchargement

Content-Disposition

Indique si la ressource transmise devrait être affichée dans le navigateur (le comportement par défaut en l'absence de l'en-tête), ou si elle devrait être gérée comme un téléchargement (auquel cas le navigateur affichera une boîte de dialogue pertinente).

Informations sur le corps

Content-Length

La taille de la ressource, exprimée en octets (sur une base décimale).

Content-Type

Le type de média de la ressource.

Content-Encoding

L'algorithme de compression utilisé.

Content-Language

La langue humaine cible pour le public, qui permet à une personne de recevoir une ressource adaptée à sa locale.

Content-Location

Indique un emplacement alternatif pour les données renvoyées.

Gestion des serveurs mandataires (proxies)

Forwarded

Permet d'ajouter des informations qui seraient perdues par ailleurs lors de la transmission par des serveurs mandataires.

Via

Information ajoutée par les serveurs mandataires (dans les deux sens) et qui peut apparaître dans les en-têtes de réponse et de requête.

Redirection

Location

Indique l'URL vers laquelle rediriger la requête.

Refresh

Indique au navigateur de rafraîchir la page ou de rediriger vers une autre. Cet en-tête prend la même valeur qu'un élément <meta> avec http-equiv="refresh".

Contexte de la requête

From

Contient une adresse électronique qui permet de s'adresser à la personne qui contrôle l'agent utilisateur qui a émis la requête.

Host

Indique le nom de domaine du serveur (pour l'hébergement virtuel) et l'éventuel numéro de port TCP sur lequel le serveur écoute.

Referer

L'adresse de la page web précédente dont le lien a mené à la page actuellement demandée.

Referrer-Policy

Gère les informations qui doivent être envoyées via l'en-tête Referer.

User-Agent

Contient une chaîne de caractères spécifique qui permet aux pairs de protocole réseau d'identifier le type d'application, le système d'exploitation, l'éditeur ou la version du logiciel utilisé par l'agent utilisateur.

Contexte de la réponse

Allow

Indique l'ensemble des méthodes HTTP prises en charge par la ressource.

Server

Contient des informations à propos du logiciel utilisé par le serveur d'origine gérant la requête.

Requêtes d'intervalle

Accept-Ranges

Indique si le serveur prend en charge les requêtes d'intervalle et, le cas échéant, l'unité selon laquelle l'intervalle doit être exprimé.

Range

Indique la partie du document que le serveur devrait renvoyer.

If-Range

Crée une requête d'intervalle conditionnelle qui est uniquement réussie si l'ETag ou la date fournie correspond à la ressource distante. Cet en-tête est utilisé afin d'éviter de télécharger deux intervalles pour des versions incompatibles d'une même ressource.

Content-Range

Indique l'emplacement du message partiel au sein du corps complet.

Sécurité

Cross-Origin-Embedder-Policy

Permet à un serveur d'indiquer une règle pour le chargement des ressources d'autres origines pour un document donné.

Cross-Origin-Opener-Policy

Empêche l'ouverture/le contrôle d'une fenêtre par d'autres domaines.

Cross-Origin-Resource-Policy

Empêche d'autres domaines de lire la réponse pour les ressources auxquelles cet en-tête est appliqué. Voir aussi la page d'explication sur.

Content-Security-Policy (CSP)

Contrôle les ressources qu'un agent utilisateur est autorisé à charger pour une page donnée.

Content-Security-Policy-Report-Only

Permet de surveiller les résultats de règles CSP sans pour autant les mettre en place. Les rapports émis en cas de violation sont des documents JSON envoyés par une requête HTTP POST à l'URI indiquée dans l'en-tête.

Permissions-Policy

Fournit un mécanisme pour autoriser ou interdire l'utilisation de certaines fonctionnalités dans le cadre de la page et dans les éventuels <iframe> qu'elle embarque.

Strict-Transport-Security (HSTS)

Force la communication à passer par HTTPS plutôt que par HTTP.

Upgrade-Insecure-Requests

Envoie un signal au serveur indiquant la préférence du client pour une réponse chiffrée et authentifiée, afin qu'il puisse correctement gérer la directive CSP upgrade-insecure-requests.

X-Content-Type-Options

Désactive le choix heuristique du type MIME et force le navigateur à utiliser le type fourni via l'en-tête Content-Type.

X-Frame-Options

Indique si un navigateur est autorisé à afficher une page dans un élément <frame>, <iframe>, <embed>, ou <object>.

X-Permitted-Cross-Domain-Policies

Indique si un fichier de règles entre domaines (crossdomain.xml) est autorisé. Le fichier pourra définir des règles pour permettre aux clients comme Adobe Acrobat, ou Apache Flex de gérer des données entre différents domaines alors que cela aurait été interdit par la politique d'origine unique. Voir le fichier PDF de spécification sur le site d'Adobe pour plus d'informations.

X-Powered-By

Cet en-tête pourra être défini par des environnements d'hébergement ou d'autres outils et contenir des informations à leur propos, qui ne sont pas utiles à l'application même ou aux personnes qui l'utilisent. Il est préférable de ne pas fournir cet en-tête aux clients pour éviter d'exposer certaines vulnérabilités.

En-têtes de métadonnées pour les requêtes de récupération

Les en-têtes de métadonnées pour les requêtes de récupération (fetch metadata request header) fournissent des informations à propos du contexte d'origine de la requête. Un serveur pourra les utiliser pour déterminer si une requête est autorisée, selon sa provenance et comment la ressource sera utilisée.

Sec-Fetch-Site

Indique la relation entre l'origine de la partie qui a initié la requête et l'origine de la ressource demandée. Il s'agit d'un en-tête structuré dont la valeur peut être cross-site, same-origin, same-site, ou none.

Sec-Fetch-Mode

Indique le mode de la requête à un serveur. Il s'agit d'un en-tête structuré dont la valeur peut être cors, navigate, no-cors, same-origin, et websocket.

Sec-Fetch-User

Indique si une requête de navigation a été déclenchée par une utilisatrice ou un utilisateur. Il s'agit d'un en-tête structuré booléen dont la valeur peut être ?0 (pour indiquer faux) ou ?1 (pour indiquer vrai).

Sec-Fetch-Dest

Indique la destination de la requête. Il s'agit d'un en-tête structuré dont la valeur peut être audio, audioworklet, document, embed, empty, font, image, manifest, object, paintworklet, report, script, serviceworker, sharedworker, style, track, video, worker, ou xslt.

Les en-têtes de requêtes qui suivent ne sont pas à strictement parler des en-têtes de métadonnées pour les requêtes de récupération, mais fournissent des informations similaires sur le contexte d'utilisation d'une ressource. Un serveur pourra les utiliser afin de modifier le comportement de son cache ou les informations qu'il renvoie :

Sec-Purpose

Indique le but de la requête lorsque celui-ci n'est pas une utilisation immédiate par l'agent utilisateur. Cet en-tête prend actuellement une seule valeur possible : prefetch, qui indique que la ressource est récupérée de façon préventive, pour préparer une éventuelle navigation future vers celle-ci.

Service-Worker-Navigation-Preload

Un en-tête de requête envoyé de façon préventive pour récupérer (via fetch()) une ressource au démarrage d'un service worker. La valeur, définie via NavigationPreloadManager.setHeaderValue(), peut être utilisée afin d'informer un serveur qu'une ressource différente (que celle fournie pour une opération fetch() normale) devrait être renvoyée.

Évènements émis par le serveur

Report-To

Cet en-tête fournir un point d'entrée à utiliser par le navigateur pour envoyer les rapports d'avertissement et d'erreur.

Encodage lors du transfert

Transfer-Encoding

Définit la forme d'encodage à utiliser pour transférer de façon sûre le corps de la requête au client.

TE

Indique les encodages de transfert acceptables pour l'agent utilisateur.

Trailer

Permet à l'émetteur d'inclure des champs complémentaires à la fin du message morcelé.

Autres

Alt-Svc

Utilisé pour lister les méthodes alternatives pour accéder au service.

Alt-Used

Utilisé pour identifier le service alternatif utilisé.

Date

Contient la date et l'heure à laquelle le message a été émis.

Cet en-tête permet de sérialiser un ou plusieurs liens dans des en-têtes HTTP. Il est sémantiquement équivalent à l'élément HTML <link>.

Retry-After

Indique la durée pendant laquelle l'agent utilisateur devrait attendre avant d'envoyer une requête suivante.

Server-Timing

Permet de communiquer une ou plusieurs métriques et leur description pour un aller-retour requête-réponse donné.

Service-Worker-Allowed

Utilisé afin de supprimer la contrainte sur le chemin lorsqu'il est inclus dans la réponse fournissant le script du service worker (voir le paragraphe correspondant dans la spécification).

SourceMap

Pointe vers une source map pour la ressource demandée.

Upgrade

Cet en-tête, valable uniquement pour HTTP/1.1, permet de basculer une connexion déjà établie sur un protocole différent (en conservant le même protocole de transport). Ainsi, un client pourra l'utiliser pour demander que la connexion bascule de HTTP/1.1 vers HTTP/2 ou pour passer d'une connexion HTTPS à une connexion WebSocket.

En-têtes expérimentaux

Indications fournies par le client (client hints)

Les indications client (ou client hints en anglais) sont des en-têtes de requêtes qui fournissent des informations à propos du client comme le type d'appareil ou les conditions réseau et qui permettent aux serveurs d'optimiser ce qui peut alors être servi dans ces conditions.

C'est aux serveurs de demander aux clients les indications qui les intéressent à l'aide de l'en-tête Accept-CH. Le client pourra alors choisir d'inclure les en-têtes demandés dans les requêtes à venir.

Accept-CH Expérimental

Les serveurs peuvent indiquer leur prise en charge des indications client à l'aide de l'en-tête Accept-CH ou d'un élément <meta> équivalent doté de l'attribut http-equiv.

Critical-CH Expérimental

Utilisé avec Accept-CH, Critical-CH est utilisé pour indiquer que les indications client acceptées sont des indications client critiques.

Les différentes catégories d'indication client sont listées ci-après.

Indications client pour l'agent utilisateur

Les indications client pour l'agent utilisateur sont des en-têtes de requête qui fournissent des informations à propos de l'agent utilisateur, de la plateforme et architecture sur lesquelles il est exécuté et à propos des préférences définies au niveau de l'agent utilisateur ou de la plateforme :

Sec-CH-UA Expérimental

La marque et la version de l'agent utilisateur.

Sec-CH-UA-Arch Expérimental

L'architecture de la plateforme sur laquelle est exécuté l'agent utilisateur.

Sec-CH-UA-Bitness Expérimental

Le nombre de bits de l'architecture du processeur de la plateforme sur laquelle l'agent utilisateur est exécuté (par exemple, 64 pour 64 bits).

Sec-CH-UA-Full-Version-List Expérimental

La version complète de chaque composante de la liste composant la marque de l'agent utilisateur.

Sec-CH-UA-Mobile Expérimental

Indique si l'agent utilisateur est exécuté sur un appareil mobile ou s'il préfère plus généralement une ergonomie mobile.

Sec-CH-UA-Model Expérimental

Le modèle d'appareil sur lequel est exécuté l'agent utilisateur.

Sec-CH-UA-Platform Expérimental

La plateforme et système d'exploitation sur lesquelles l'agent utilisateur est exécuté.

Sec-CH-UA-Platform-Version Expérimental

La version du système d'exploitation sur lequel l'agent utilisateur est exécuté.

Sec-CH-UA-Prefers-Color-Scheme Expérimental

Indique la préférence de l'utilisatrice ou de l'utilisateur entre un thème clair ou un thème sombre.

Sec-CH-UA-Prefers-Reduced-Motion Expérimental

Indique la préférence de l'utilisatrice ou de l'utilisateur pour voir moins d'animations et d'effets décalant le contenu.

Indications client relatives à l'appareil

Device-Memory Expérimental

Indique la quantité approximative de mémoire vive disponible sur le client. Cet en-tête s'inscrit dans l'API Device Memory.

Indications client relatives au réseau

Les indications client relatives au réseau permettent au serveur de choisir les informations envoyées selon la bande passante et la latence réseau du client.

Une approximation de la bande passante, exprimée en Mo/s entre le client et le serveur. Cet en-tête s'inscrit dans l'API Network Information API.

ECT Expérimental

Le type de connexion effectif qui correspond le mieux à la latence et bande passante de la connexion. Cet en-tête s'inscrit dans l'API Network Information API.

RTT Expérimental

Le temps d'aller-retour (RTT) au niveau de la couche d'application, exprimée en millisecondes, et qui inclut le temps de traitement du serveur. Cet en-tête s'inscrit dans l'API Network Information API.

Save-Data Expérimental

Une chaîne de caractères indiquant la préférence de l'agent utilisateur pour un usage de données réduit.

Confidentialité

Sec-GPC Non-standard Expérimental

Indique le consentement ou l'absence de consentement pour le partage des informations personnelles avec des tierces parties.

Sécurité

Origin-Isolation Expérimental

Fournit un mécanisme permettant aux applications web d'isoler leurs origines.

Évènements émis par le serveur

NEL Expérimental

Définit un mécanisme pour les rapports relatifs aux erreurs réseau.

Autres

Accept-Push-Policy Expérimental

Un client pourra exprimer la gestion de la requête poussée par le serveur via cet en-tête (voir Accept-Push-Policy).

Accept-Signature Expérimental

Un client pourra envoyer cet en-tête afin d'indiquer son intention de tirer parti des signatures disponibles et d'indiquer les types de signature qu'il prend en charge (voir Accept-Signature).

Early-Data Expérimental

Indique que la requête a été transmise avec les premières données TLS (TLS early data).

Push-Policy Expérimental

Cet en-tête définit le comportement push du serveur pour le traitement d'une requête. Voir Push-Policy.

Signature Expérimental

Cet en-tête contient une liste de signatures pour un échange, chacune étant accompagnée d'informations pour déterminer l'autorité correspondante et les moyens de rafraîchir la signature. Voir Signature.

Signed-Headers Expérimental

Cet en-tête contient une liste ordonnée des en-têtes à inclure dans une signature. Voir Signed-Headers.

Supports-Loading-Mode Expérimental

Défini par une cible de navigation afin d'opter pour des modes de chargement plus risqué, comme le prérendu pour un même site sur plusieurs origines. Seule la valeur credentialed-prerender peut être utilisée.

En-têtes non-standards

X-Forwarded-For Non-standard

Identifie l'adresse IP d'origine d'un client qui se connecte à un serveur web via un intermédiaire (comme un proxy ou un load balancer).

X-Forwarded-Host Non-standard

Identifie l'hôte demandé à l'origine par le client qui se connecte à l'intermédiaire (proxy ou un load balancer).

X-Forwarded-Proto Non-standard

Identifie le protocole (HTTP ou HTTPS) utilisé par le client pour se connecter à l'intermédiaire (proxy ou un load balancer).

X-DNS-Prefetch-Control Non-standard

Contrôle la récupération proactive du DNS, utilisée par les navigateurs pour résoudre en avance les noms de domaine que la personne pourra atteindre via les liens, images, fichiers CSS ou JavaScript, etc.

X-Robots-Tag Non-standard

Cet en-tête indique comment une page web doit être indexée par les moteurs de recherche public. En pratique, cet en-tête est équivalent à <meta name="robots" content="…">. Voir la page de documentation de Google.

En-têtes dépréciés

Pragma Obsolète

Un en-tête spécifique pour chaque implémentation pouvant avoir divers effets le long de la chaîne de requête-réponse. Utilisé pour la rétrocompatibilité avec les caches HTTP/1.0 où l'en-tête Cache-Control n'est pas encore présent.

Warning Obsolète

Un champ d'avertissement général contenant des informations sur les problèmes possibles.

Voir aussi