我们如何制作与Apache相匹配的etag?

时间:2020-03-05 18:47:57  来源:igfitidea点击:

我想制作一个与Apache产生的匹配的etag。 apache是​​如何创建其标签的?

解决方案

回答

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)));

回答

如果我们是动态生成页面,则可能没有意义。如果使用PHP,则可以选择主脚本的索引节点和文件大小,但是修改时间不会告诉我们数据是否已更改。除非我们具有良好的缓存过程或者仅生成静态页面,否则etag不会有帮助。如果我们确实具有良好的缓存过程,则inode和文件大小可能无关紧要。

编辑:对于不知道什么是etags的人,只是出于缓存目的,它们应该是在内容更改时会更改的值。浏览器从Web服务器获取etag,将其与etag的缓存副本进行比较,然后在etag更改的情况下获取整个页面。

回答

关于Apache的Etags要记住的一件事是,它们在集群中的表现不佳,因为它们包含可以并且可能在同一集群中的机器之间变化的inode信息。