自定义etag生成

我如何配置apache或nginx服务器使用我选择的算法(即不涉及inode,mtime或size)发送Etag头文件? 有没有其他编译新的C模块?


在Apache中,ETags作为核心功能处理。 ETag被计算为几个值的散列值。 您可以在httpd.conf.htaccess文件中使用FileETag指令来定义包含在哈希中的值的条件行为,但正如您所指出的那样,您的选项仅限于:

  • INode - 您的文件在其服务的特定服务器上的i-node编号
  • MTime - 您的文件所服务的服务器的时间戳(以毫秒为单位)
  • Size - 文件大小(以字节为单位)
  • All - 以上所有
  • None - 以上都不是
  • 如果你想真正定制ETag代,你绝对会写一个Apache模块。 但是,如果您需要快速修复的问题,则可以通过将请求路由到PHP脚本并在脚本中附加Etag头来生成自己的标记。 在你的httpd.conf.htaccess文件中,路由可能如下所示:

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

    PHP脚本可能如下所示:

    <?
        $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
    ?>
    
    链接地址: http://www.djcxy.com/p/54201.html

    上一篇: Custom etag generation

    下一篇: JUnit adding extra tests to Test Case