Génération d’etag personnalisée

Comment puis-je configurer un serveur Apache ou Nginx pour envoyer des en-têtes Etag en utilisant un algorithme de mon choix (sans impliquer inode, mtime ou size)? Existe-t-il une alternative à la compilation d’un nouveau module C?

Dans Apache, les ETags sont traités comme une fonctionnalité de base . L’ETag est calculé sous la forme d’un hachage de plusieurs valeurs. Vous pouvez utiliser la directive FileETag dans votre fichier httpd.conf ou .htaccess pour définir un comportement conditionnel pour les valeurs à inclure dans le hachage, mais comme vous l’avez souligné, vos options sont limitées à:

  • INode – le numéro i-node de votre fichier sur le serveur particulier à partir duquel il est servi
  • MTime – l’horodatage (en millis) du serveur à partir duquel votre fichier est servi
  • Size – la taille de votre fichier en octets
  • All – tout ce qui précède
  • None – aucun de ce qui précède

Si vous voulez vraiment une génération ETag personnalisée, vous feriez mieux d’écrire un module Apache. Cependant, si vous avez besoin d’un correctif rapide, vous pouvez générer vos propres balises en acheminant vos requêtes vers un script PHP et en ajoutant l’en Etag tête Etag au script. La route peut ressembler à ceci dans votre fichier httpd.conf ou .htaccess :

 RewriteCond %{REQUEST_FILENAME} \.png$ # This example looks for .png requests RewriteRule ^(.*)$ /gentag.php?path=$1 [B] # ...and routes them to a PHP script 

Le script PHP pourrait ressembler à ceci: