Serveur Apache HTTP Version 2.4
Description: | Personnalisation des en-têtes de requêtes et de réponses HTTP |
---|---|
Statut: | Extension |
Identificateur de Module: | headers_module |
Fichier Source: | mod_headers.c |
Ce module fournit des directives permettant de contrôler et modifier les en-têtes de requêtes et de réponses HTTP. Les en-têtes peuvent être fusionnés, remplacés ou supprimés.
Les directives fournies par mod_headers
peuvent
s'insérer presque partout dans la configuration du serveur, et on
peut limiter leur portée en les plaçant dans des sections de configuration.
La chronologie du traitement est importante et est affectée par l'ordre d'apparition des directives dans le fichier de configuration et par leur placement dans les sections de configuration. Ainsi, ces deux directives ont un effet différent si leur ordre est inversé :
RequestHeader append MirrorID "mirror 12" RequestHeader unset MirrorID
Dans cet ordre, l'en-tête MirrorID
n'est pas défini.
Si l'ordre des directives était inversé, l'en-tête
MirrorID
serait défini à "mirror 12".
mod_headers
peut agir soir précocement, soit
tardivement au niveau de la requête. Le mode normal est le mode
tardif, lorsque les en-têtes de requête sont définis, immédiatement
avant l'exécution du générateur de contenu, et pour les en-têtes de
réponse, juste au moment où la réponse est envoyée sur le réseau.
Utilisez toujours le mode tardif sur un serveur en production.
Le mode précoce a été conçu à des fins d'aide aux tests et au
débogage pour les développeurs. Les directives définies en utilisant
le mot-clé early
sont censées agir au tout début du
traitement de la requête. Cela signifie que l'on peut les utiliser
pour simuler différentes requêtes et définir des situations de test,
tout en gardant à l'esprit que les en-têtes peuvent être modifiés à
tout moment par d'autres modules avant que le réponse ne soit
générée.
Comme les directives précoces sont traitées avant que le
chemin de la requête ne soit parcouru, les en-têtes
précoces ne peuvent être définis que dans un contexte de serveur
principal ou de serveur virtuel. Les directives précoces ne peuvent
pas dépendre d'un chemin de requête, si bien qu'elles échoueront
dans des contextes tels que <Directory>
ou
<Location>
.
Header echo ^TS
mon-en-tête
, qui
contient un horodatage permettant de déterminer le moment où la
requête a été reçue, et le temps qui s'est écoulé jusqu'à ce que
la requête ait commencé à être servie. Cet en-tête peut être
utilisé par le client pour estimer la charge du serveur ou
isoler les goulets d'étranglement entre le client et le
serveur.
Header set mon-en-tête "%D %t"
le résultat est l'ajout à la réponse d'un en-tête du type :
mon-en-tête: D=3775428 t=991424704447256
Header set mon-en-tête "Bonjour Joe. Il a fallu %D microsecondes \
à Apache pour servir cette requête."
le résultat est l'ajout à la réponse d'un en-tête du type :
Header set MyHeader "Bonjour Joe. Il a fallu D=3775428 microsecondes à Apache pour servir cette requête."
mon-en-tête
à la réponse si et
seulement si l'en-tête mon-en-tête-requête
est
présent dans la requête. Ceci peut s'avérer utile pour générer
des en-têtes de réponse "à la tête du client". Notez que cet
exemple nécessite les services du module
mod_setenvif
.
SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
Si l'en-tête mon-en-tête-requête: mavaleur
est
présent dans la requête HTTP, la réponse contiendra un en-tête
du type :
mon-en-tête: D=3775428 t=991424704447256 montexte
RequestHeader edit Destination ^https: http: early
CGI
,
NO_CACHE
et NO_STORE
existent pour la
requête) :
Header merge Cache-Control no-cache env=CGI Header merge Cache-Control no-cache env=NO_CACHE Header merge Cache-Control no-store env=NO_STORE
alors, la réponse contiendra l'en-tête suivant :
Cache-Control: no-cache, no-store
Si append
avait été utilisé à la place de
merge
, la réponse aurait contenu l'en-tête suivant
:
Cache-Control: no-cache, no-cache, no-store
Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"
Description: | Configure les en-têtes d'une réponse HTTP |
---|---|
Syntaxe: | Header [condition] add|append|echo|edit|edit*|merge|set|unset|note
en-tête [valeur] [remplacement]
[early|env=[!]variable]|expr=expression]
|
Contexte: | configuration du serveur, serveur virtuel, répertoire, .htaccess |
AllowOverride: | FileInfo |
Statut: | Extension |
Module: | mod_headers |
Compatibilité: | La condition par défaut est temporairement passée à "always" dans les version 2.3.9 et 2.3.10 |
Cette directive permet de remplacer, fusionner, ou supprimer des en-têtes de réponse HTTP. L'en-tête est modifié juste après que le gestionnaire de contenu et les filtres en sortie ne s'exécutent, ce qui permet la modification des en-têtes sortants.
L'argument optionnel condition permet de déterminer
sur quelle table interne d'en-têtes de réponses cette directive va
opérer. D'autres composants du serveur peuvent avoir stocké leurs
en-têtes de réponses dans la table correspondant à
onsuccess
ou dans celle correspondant à
always
. Dans ce contexte, "Always" fait référence au
choix d'envoyer les en-têtes que vous ajoutez aux réponses, qu'elle
soient avec succès ou échouées ; par contre, si votre action est une
fonction d'un en-tête existant, vous devrez lire la documentation de
manière plus approfondie car dans ce cas, les choses se compliquent.
Vous pouvez avoir à changer la valeur par défaut
onsuccess
en always
dans des circonstances
similaires à celles exposées plus loin. Notez aussi que la répétition
de cette directive avec les deux conditions peut être pertinente
dans certains scénarios, car always
n'englobe pas
onsuccess
en ce qui concerne les en-têtes existants :
always
est utilisée dans la réponse
définitive.always
et non dans la table par
défaut.onsuccess
.L'action que cette directive provoque est déterminée par le premier argument (ou par le second argument si une condition est spécifiée). Il peut prendre une des valeurs suivantes :
add
set
, append
ou merge
.append
echo
edit
edit*
edit
n'effectuera une
recherche/remplacement qu'une seule fois dans la valeur de
l'en-tête, alors que la forme edit*
en effectuera autant
que le nombre d'apparition de la chaîne à remplacer.merge
set
setifempty
unset
note
Cet argument est suivi d'un nom d'en-tête qui peut se
terminer par un caractère ':', mais ce n'est pas obligatoire. La
casse est ignorée avec set
, append
,
merge
, add
, unset
et
edit
. Le nom d'en-tête est sensible à la
casse pour echo
et peut être une expression rationnelle.
Avec set
, append
, merge
et
add
, une valeur est spécifiée comme
argument suivant. Si valeur contient des espaces, elle
doit être entourée de guillemets. valeur peut être une
chaîne de caractères, une chaîne contenant des spécificateurs de
format, ou une combinaison des deux. valeur supporte les
spécificateurs de format suivants :
Format | Description |
---|---|
%% |
Le caractère pourcentage |
%t |
Le moment de réception de la requête en temps
universel coordonné depuis le temps epoch (Jan. 1, 1970) et
exprimé en microsecondes. La valeur est précédée de
t= . |
%D |
Le temps écoulé entre la réception de la requête et l'envoi
des en-têtes sur le réseau. Il s'agit de la durée de traitement
de la requête. La valeur est précédée de D= . La
valeur est exprimée en microsecondes. |
%l |
La charge courante du serveur. Ce sont les valeurs fournies
par getloadavg() qui représentent la charge
courante, ainsi que la charge moyenne pendant les cinq et les
quinze dernières minutes. Chaque valeur est précédée de
l= et séparée des autres par un slash
/ .
|
%i |
Le pourcentage de disponibilité de httpd (0 à 100) basé sur
le nombre de threads et de processus disponibles. La valeur est
précédée de i= .
|
%b |
Le pourcentage d'utilisation de httpd (0 à 100) basé sur
le nombre de threads et de processus disponibles. La valeur est
précédée de b= .
|
%{NOM_VARIABLE}e |
Le contenu de la variable
d'environnement NOM_VARIABLE . |
%{NOM_VARIABLE}s |
Le contenu de la variable
d'environnement SSL NOM_VARIABLE , si
mod_ssl est activé. |
Le spécificateur de format %s
est disponible
depuis la version 2.1 d'Apache ; il peut être utilisé à la place
de %e
pour éviter de devoir spécifier
SSLOptions +StdEnvVars
. Cependant, si
SSLOptions +StdEnvVars
doit tout de même être
spécifié pour une raison quelconque, %e
sera plus
efficace que %s
.
edit
nécessite les deux arguments
valeur, qui est une expression
rationnelle, et une chaîne additionnelle
remplacement. Depuis la version 2.4.7, la chaîne de
remplacement peut aussi contenir des spécificateurs de format.
La directive Header
peut être suivie d'un
argument additionnel qui peut prendre les valeurs suivantes :
early
env=[!]variable
variable
existe. Un !
devant
variable
inverse le test, et la directive ne
s'appliquera alors que si variable
n'est pas définie.expr=expression
Excepté le cas du mode précoce, les
directives Header
sont traitées juste avant
l'envoi de la réponse sur le réseau. Cela signifie qu'il est
possible de définir et/ou modifier la plupart des en-têtes, à
l'exception de ceux qui sont ajoutés par le filtre HTTP
d'en-tête, comme Content-Type.
Description: | Configure les en-têtes d'une requête HTTP |
---|---|
Syntaxe: | RequestHeader add|append|edit|edit*|merge|set|unset
en-tête [valeur] [remplacement]
[early|env=[!]variable]|expr=expression]
|
Contexte: | configuration du serveur, serveur virtuel, répertoire, .htaccess |
AllowOverride: | FileInfo |
Statut: | Extension |
Module: | mod_headers |
Cette directive permet de remplacer, fusionner, modifier ou supprimer des en-têtes de requête HTTP. L'en-tête est modifié juste avant que le gestionnaire de contenu ne s'exécute, ce qui permet la modification des en-têtes entrants. L'action effectuée est déterminée par le premier argument. Ce dernier accepte les valeurs suivantes :
add
set
, append
ou merge
.append
edit*
edit
, la chaîne de l'en-tête correspondant au modèle ne
sera recherchée et remplacée qu'une seule fois, alors qu'avec
edit*
, elle le sera pour chacune de ses instances si
elle apparaît plusieurs fois.merge
set
setifempty
unset
Cet argument est suivi d'un nom d'en-tête qui peut se terminer
par un caractère ':', mais ce n'est pas obligatoire. La casse est
ignorée. Avec set
, append
,
merge
et add
, une valeur est
fournie en troisième argument. Si une valeur contient des
espaces, elle doit être entourée de guillemets. Avec
unset
, aucune valeur ne doit apparaître.
valeur peut être une chaîne de caractères, une chaîne
contenant des spécificateurs de format, ou une combinaison des deux.
Les spécificateurs de format supportés sont les mêmes que ceux de la
directive Header
, à
laquelle vous pouvez vous reporter pour plus de détails. Avec
edit
, les deux arguments valeur et
remplacement sont obligatoires, et correspondent
respectivement à une expression
rationnelle et à une chaîne de remplacement.
La directive RequestHeader
peut être
suivie d'un argument supplémentaire, qui pourra prendre les valeurs
suivantes :
early
env=[!]variable
variable
existe. Un !
devant
variable
inverse le test, et la directive ne
s'appliquera alors que si variable
n'est pas définie.expr=expression
Excepté le cas du mode précoce, la directive
RequestHeader
est traitée juste avant la
prise en compte de la requête par son gestionnaire, au cours de la
phase de vérification. Ceci permet la modification des en-têtes
générés par le navigateur, ou par les filtres en entrée
d'Apache.