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.
-
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.
-
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 avecIf-Modified-Since
etIf-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
etIf-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)
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>
avechttp-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
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
, ounone
. 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
, etwebsocket
. 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
, ouxslt
.
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. -
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 viaNavigationPreloadManager.setHeaderValue()
, peut être utilisée afin d'informer un serveur qu'une ressource différente (que celle fournie pour une opérationfetch()
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.
Link
-
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'attributhttp-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.
Downlink
Expérimental-
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.