我想做一个etag相匹配的什么阿帕奇生产。怎么apache创建它的etag?

有帮助吗?

解决方案

Apache使用的标准格式的inode-filesize-mtime.唯一要注意的是,mtime必须是划时代的时间和填充零,所以它是16位。这里是如何做到这一点在PHP:

$fs = stat($file);
header("Etag: ".sprintf('"%x-%x-%s"', $fs['ino'], $fs['size'],base_convert(str_pad($fs['mtime'],16,"0"),10,16)));

其他提示

要记住的一件事关于Apache Etag是他们不播放以及在集群,因为它们包括索引信息,可以而且很可能会改变机器之间在相同的集群。

如果你的动态产生您的主页虽然这可能不会有意义。如果你在PHP,你可以选择索引和文件的大小主要剧本,但修改时不会告诉你,如果你的数据已经改变。除非你有一个很好的缓存过程中或刚刚产生的静态网页,etag不是有帮助的。如果你有一个很好的缓存过程中,该索引和文件的大小可能是无关紧要的。

编辑:人谁不知道什么 etags-他们只是应该是一个值的变化时的内容已经改变,对于缓存的目的。浏览器获取的etag从万维网服务器,进行比较的etag其缓存的副本,然后提取整个网页,如果etag已经改变。

回答上述(从克里斯)运作良好,但可以简化采用一个隐含的投sprintf:

sprintf('"%x-%x-%x"', $s['ino'], $s['size'], str_pad($s['mtime'], 16, "0"));

该建议 %016x 不工作是因为填补应用之后转换为六角,而不是之前。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top