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:
$path = $_GET['path']; // Grab the filepath from GET params $cont = file_get_contents($path); // Get file contents to hash $hash = crc32($cont); // Create your own ETag hash however you like header("Etag: $hash"); // Send the custom Etag header echo $cont; // Dump the file contents to output ?>