Un "handler" est une représentation interne à Apache de l'action qui doit être effectuée lorsqu'un fichier est appelé. En général, les fichiers activent des handlers implicites, selon le type de fichier. Normalement, les fichiers sont servis "simplement" par le serveur, mais certains types de fichiers sont "traités" à part. Par exemple, vous pouvez utiliser un type "application/x-httpd-cgi" pour invoquer des scripts CGI.
Apache 1.1 ajoute la possibilité d'utiliser des handlers explicitement. Que ce soit sur la base des extensions de noms de fichiers ou de la position de ces derniers, ces handlers ne sont pas liés au type intrinsèque de fichier. Ceci est avantageux à double titre ; parce que la solution est plus élégante, mais parce que cela permet aussi d'associer à la fois un type et un handler à n'importe quel fichier.
Les handlers peuvent soit être implémentés à l'intérieur du serveur sous forme de module, ou être ajoutés par la directive Action. Les handlers intégrés dans la distribution standard sont les suivants :
La directive AddHandler assigne aux fichiers d'extension extension le
handler nomHandler. Par exemple, pour activer des scripts CGI d'extension ".cgi
", vous devrez écrire :
AddHandler cgi-script cgi
Une vois cette ligne insérée dans le fichier srm.conf ou httpd.conf file, tout fichier dont le nom se termine par ".cgi
" sera considéré comme un programme CGI.
Lorsqu'insérée dans un fichier .htaccess
ou dans une section <Directory>
ou <Location>
,
cette directive force tous les fichiers du répertoire à être considérés à travers le
handler désigné par nomHandler. Par exemple, si vous avez réservé un répertoire particulier aux tables de mapping d'images, et vous désirez activer ces fonctionnalités pour tout fichier dans ce répertoire quel que soit l'extension, vous écririez la ligne suivante dans le fichier .htaccess
présent dans ce répertoire :
SetHandler imap-file
Un autre exemple: si vous souhaîtez que le serveur affiche un rapport d'état
lorsque l'URL http://servername/status
est requise, vous écririez ceci dans le fichier access.conf:
<Location /status> SetHandler server-status </Location>
Pour l'implémentation de handlers, nous avons ajouté des API Apache que les implémenteurs peuvent utiliser. Plus spécifiquement, un nouvel enregistrement a été ajouté à la structure request_rec
:
char *handler
Si vous souhaîtez que votre module appelle un handler, vous devez simplement
renseigner r->handler
avec le nom du handler (à chaque fois) avant d'invoquer l'étage invoke_handler
de la requête. Les handlers sont implémentés de la même façon qu'auparavant, sauf que le nom du handler est utilisé au lieu d'un type de contenu. Bien que celà ne soit pas indispensable, les conventions de nommage pour les handlers demandent l'utilisation d'un nom composé de mots séparés par un
tiret, sans slashs, de façon à ne pas perturber la définition de l'epace de noms de types de média.
Version française © Valery Fremaux / EISTI 1998