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
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é :
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".
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
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.
le résultat est l'ajout à la réponse d'un en-tête du type :
le résultat est l'ajout à la réponse d'un en-tête du type :
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
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 :
CGI,
NO_CACHE et NO_STORE existent pour la
requête) :
alors, la réponse contiendra l'en-tête suivant :
Si append avait été utilisé à la place de
merge, la réponse aurait contenu l'en-tête suivant
:
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 :
addset, append ou merge.appendeditedit*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.mergesetsetifemptyunsetCet 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 edit, les deux arguments valeur et
remplacement sont obligatoires, et correspondent
respectivement à une
La directive
earlyenv=[!]variablevariable existe. Un ! devant
variable inverse le test, et la directive ne
s'appliquera alors que si variable n'est pas définie.expr=expressionExcepté le cas du mode précoce, la directive
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 : onsuccess (valeur par défaut, peut être omis) ou
always. La situation où vous devez spécifier
always dépend des différentes actions ci-dessous.
Etudiez avec attention la différence entre always et
onsuccess pour chaque action décrite ci-dessous car le
comportement induit n'est pas trivial et est souvent source de
confusion. Lorsqu'il est conseillé de répéter les conditions, vous
pouvez expérimenter chacune d'entre elles et utiliser celle qui vous
paraît la plus efficace pour correspondre à l'en-tête préexistant.
addset, append ou merge.
Choix de la condition : spécifiez la condition
always si vous souhaitez que l'en-tête soit aussi ajouté aux
réponses de type non-2xx (comme les redirections ou les erreurs).
appendChoix de la condition : si l'en-tête préexistant
auquel vous voulez ajouter une valeur a été ajouté par ce module, vous devez
spécifier la même condition que celle utilisée à l'origine. Dans le cas
contraire, vous devez déterminer expérimentalement si always
doit être spécifié car vous ne pouvez pas savoir de manière sure dans quelle
table interne la valeur existante est présente.
echoChoix de la condition : spécifiez la condition
always si vous souhaitez que l'en-tête soit aussi ajouté aux
réponses de type non-2xx (comme les redirections ou les erreurs).
editedit*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.
Choix de la condition : en fonction de l'origine de
l'en-tête à éditer, vous pourrez être amenés à répéter votre directive
edit/edit* avec les deux conditions always et
onsuccess. Autrement, vous pouvez déterminer expérimentalement
si une condition always est nécessaire.
mergeChoix de la condition : si l'en-tête préexistant
auquel vous voulez ajouter une valeur a été ajouté par ce module, vous devez
spécifier la même condition que celle utilisée à l'origine. Dans le cas
contraire, vous devez déterminer expérimentalement si always
est nécessaire.
setChoix de la condition : si l'en-tête à définir a été
ajouté par ce module, vous devez spécifier la même condition que celle
utilisée à l'origine. Dans le cas contraire, vous devez déterminer
expérimentalement si always est nécessaire.
setifemptyChoix de la condition : si l'en-tête à définir a été
ajouté par ce module, vous devez spécifier la même condition que celle
utilisée à l'origine. Dans le cas contraire, vous devez déterminer
expérimentalement si always est nécessaire.
setifempty est évalué. Dans ce cas, il est
préférable d'utiliser set comme dans l'exemple suivant :
unsetChoix de la condition : répétez cette directive avec
les deux conditions always et onsuccess pour être
sur que l'en-tête soit bien supprimé, ou déterminez
expérimentalement si always est nécessaire.
noteChoix de la condition : si l'en-tête cible a été
ajouté par ce module, vous devez spécifier la même condition que celle
utilisée à l'origine. Dans le cas contraire, vous devez déterminer
expérimentalement si always est nécessaire.
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
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 propres à
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 moyenne courante du serveur proprement dit. Ce
sont les valeurs obtenues par getloadavg() qui
représentent la charge moyenne courante, sur 5 minutes et sur 15
minutes. Chaque valeur est précédée de l= et
séparée de la suivante par un /.Disponible depuis la version 2.4.4 du serveur HTTP Apache. |
%i |
Le pourcentage courant de httpd au repos (de 0 à 100)
en se basant sur le nombre de processus et threads disponibles.
La valeur est précédée de i=.Disponible depuis la version 2.4.4 du serveur HTTP Apache. |
%b |
Le pourcentage courant de httpd utilisé (de 0 à 100)
en se basant sur le nombre de processus et threads disponibles.
La valeur est précédée de b=.Disponible depuis la version 2.4.4 du serveur HTTP Apache. |
%{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
|
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.
Lorsque le paramètre valeur utilise l'interpréteur ap_expr, certaines syntaxes d'expressions seront différentes des exemples qui évaluent des expressions booléennes telles que <If> :
editnécessite les deux arguments
valeur, qui est une
La directive
earlyenv=[!]variablevariable existe. Un ! devant
variable inverse le test, et la directive ne
s'appliquera alors que si variable n'est pas définie.expr=expressionExcepté le cas du mode précoce, les
directives