Navigateurs
Une des complications du Web est que les internautes sont libres de choisir leur navigateur, que tous les navigateurs ne fonctionnent pas de la même façon et que les différences sont parfois importantes. De plus, leurs possibilités varient énormément : certains savent afficher des images, d’autres non ; parmi ceux qui affichent des images, certains ne savent pas gérer les frames, les tableaux, Java, etc.
Pour contourner ce problème, vous pouvez faire en sorte que vos visiteurs exécutent des parties différentes de votre script (« Cliquez ici pour voir la version avec frames ») mais, dans la réalité, les gens ne connaissent pas les capacités de leur navigateur et beaucoup ne comprendront pas les questions que vous leur posez. Pour régler ce problème, Apache peut détecter le type du navigateur du client et configurer les variables d’environnement pour que vos scripts CGI puissent alors agir en conséquence.
SetEnvIf et SetEnvIfNoCase
SetEnvIf attribut expr_rat var_env[=valeur] [..]
SetEnvIfNoCase attribut expr_rat var_env[=valeur] [..]
Configuration du serveur, hôte virtuel,
répertoire, .htaccess
(uniquement à partir de la version 1.3.14).
attribut peut être l’un des en-têtes de requête HTTP, comme Host, User-Agent, Referer et/ou :
Remote_Host
Le nom d’hôte du client, s’il est disponible.
Remote_Addr
L’adresse IP du client.
Remote_User
Le nom d’utilisateur authentifié du client, s’il est disponible.
Request_Method
GET, POST, etc.
Request_URI
La partie de l’URL située après le schéma et l’hôte.
La version NoCase fonctionne de la même façon, sauf que la correspondance avec l’expression régulière ne tient pas compte de la casse.
BrowserMatch et BrowserMatchNoCase
BrowserMatch expr_rat env1 [= valeur1 ] env2 [= valeur2 ] ...
BrowserMatchNoCase expr_rat env1 [= valeur1 ] env2 [= valeur2 ] ...
Configuration du serveur, hôte virtuel, répertoire, .htaccess
(uniquement à partir de la version 1.3.14).
expr_rat est une expression régulière comparée à l’en-tête User-Agent du client et env1, env2, ... sont des variables d’environnement qui seront initialisées avec les valeurs indiquées s’il y a correspondance.
Ainsi, par exemple, nous pourrions écrire :
BrowserMatch ^Mozilla/[23] tables=3 java
Le symbole ^ signifie que l’on part du début de l’en-tête. On recherche la chaîne Mozilla/ suivie de 2 ou 3. Si cela correspond, Apache crée la liste des variables d’environnement que l’on a spécifié et, si on l’a indiqué, leur donne des valeurs. Ces variables sont inventées par le créateur du script et sont :
tables=3
java
Ces variables seront testées dans le script CGI afin de choisir l’action appropriée.
BrowserMatchNoCase est simplement une version de BrowserMatch insensible à la casse : avec elle, mOZILLA serait considéré de la même façon que MoZiLlA.
Remarquez qu’il n’y a aucune différence entre BrowserMatch et SetEnvIf User-Agent. La première existe pour des raisons de compatibilité ascendante.
nokeepalive
Désactive KeepAlive. Certaines versions de Netscape prétendent qu’elles reconnaissent KeepAlive, mais elle comportent un bogue qui fait que le serveur semble figé (en fait, Netscape tente de réutiliser la connexion existante, même si le serveur l’a fermée). La directive :
BrowserMatch "Mozilla/2" nokeepalive
permet de désactiver KeepAlive pour ces versions boguées.
force-response-1.0
Force Apache à répondre avec HTTP 1.0 au lieu de HTTP 1.1 à un client HTTP 1.0, comme cela est requis par la spécification HTTP 1.1. Cela est nécessaire pour contourner certains clients bogués qui ne reconnaissent pas les réponses HTTP 1.1. Plusieurs clients souffrent de ce problème et, actuellement, les configurations conseillées sont les suivantes :
#
# Les directives suivantes modifient le comportement d’une réponse
# HTTP normale. La première désactive keepalive pour Netscape 2.x et
# les navigateurs qui se font passer pour lui car il y a des problèmes
# connus avec ces implémentations. La seconde concerne Microsoft
# Internet Explorer 4.0b2, qui a une mauvaise implémentation de
# HTTP/1.1 et qui ne reconnaît pas correctement keepalive lorsqu’il
# est utilisé sur des réponses 301 ou 302 (redirect).
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
#
# La directive suivante désactive les réponses HTTP/1.1 pour les
# navigateurs qui violent la spécification HTTP/1.0 en n’étant pas
# capables de produire une réponse 1.1 de base.
#
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
downgrade-1.0
Force Apache à revenir à HTTP 1.0, même si le client est en HTTP 1.1 (ou supérieur). Microsoft Internet Explorer 4.0b2 a la particularité douteuse d’être le seul client connu à nécessiter ces trois configurations :
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0