From d3eeee08a532a33497dcf837b0ee1609b10051a4 Mon Sep 17 00:00:00 2001
From: Lucien Gentis L'argument optionnel condition permet de déterminer
sur quelle table interne d'en-têtes de réponses cette directive va
opérer : Comme il n'y a pas de liste unique "normalisée" d'en-têtes, la manière
- dont httpd stocke en interne les en-têtes des réponses HTTP est à l'origine
- de la fonctionnalité que constitue la différence entre
- Plusieurs modèles de configuration permettent de contourner ce problème,
- comme celui-ci : Outre le paramètre condition décrit ci-dessus, vous
- pouvez limiter une action en fonction de codes d'état HTTP, par
- exemple pour les requêtes mandatées ou générées par un programme
- CGI. Voir l'exemple qui utilise %{REQUEST_STATUS} dans la section
- ci-dessus. 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 :onsuccess
(valeur par défaut, peut être omis) ou
- always
. A la différence de ceux de la première table, les
- en-têtes de la seconde sont ajoutés à la réponse même en cas d'erreur et
- sont conservés au fil des redirections internes (par exemple les
- gestionnaires ErrorDocument). 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.mod_proxy_fcgi
, auquel cas, les en-têtes des scripts CGI
- sont dans la table correspondant à always
et non dans la
- table par défaut.onsuccess
.onsuccess
et always
. Si vous ne gardez pas à
- l'esprit le concept ci-après lors de l'écriture de votre configuration,
- certaines réponses HTTP pourront contenir des en-têtes dupliqués
- (ce qui pourra dérouter les utilisateurs ou même parfois les clients HTTP). Supposons par
- exemple que votre configuration comporte un mandataire PHP simple avec
- mod_proxy_fcgi
et que votre script PHP d'arrière-plan
- ajoute l'en-tête X-Foo: bar
à chaque réponse HTTP. Comme décrit
- plus haut, mod_proxy_fcgi
utilise la table
- always
pour stocker les en-têtes, et une configuration comme la
- suivante n'aboutira pas au résultat attendu car l'en-tête sera dupliqué
- avec les deux valeurs :# la valeur de X-Foo est définie dans la table d'en-têtes 'onsuccess'
-Header set X-Foo: baz
-
-
- # 'onsuccess' peut être omis car il s'agit de la valeur par défaut
-Header onsuccess unset X-Foo
-Header always set X-Foo "baz"
-
-
- always
. La situation où vous devez spécifier
+ always
dépend des différentes actions ci-dessous.
Vous devez lire la différence, décrite plus haut, entre les listes
- d'en-têtes always
et onsuccess
avant de lire
- la liste d'actions ci-dessous car cet important concept s'applique
- encore ici. En fait, chaque action fonctionne telle qu'elle est décrite
- mais seulement pour la liste d'en-têtes cible.
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.
set
, append
ou merge
.
+ set
, 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).
append
Choix 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.
echo
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).
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.
+ 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.
merge
Choix 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.
set
Choix 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
Choix 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.
unset
Choix 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.
note
Choix 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.