如何以编程的方式生成网页的etag,这种做法是否被推荐?有些网站建议关闭etag,有些则建议手动生成,还有些建议保留默认设置 - 在这里哪种方法最好?
我建议对内容生成哈希值,例如md5($content)
。
此外,为了防止哈希碰撞,如果适用的话,可以添加内容元素的ID。
$content
已经可用/已读取的情况下,应该使用文件元数据(大小和时间戳)。 - blueyed以前建议使用MD5 Hash是一个好主意,尽管你必须防止它成为性能问题。该建议的实现留给读者自行处理,尽管我认为这似乎是框架可以为您处理的事情。
对于我自己而言,由于我处于简单环境中,文件时间戳将足以满足需求,我只需在我的.htaccess文件中使用FileETag none
关闭它们。这样就可以解决YSlow的问题,并且应该使事情回退到文件的最后修改日期。
Mufasa,
雅虎(和 YSlow)实际上鼓励使用它们,但有一个警告,即自动生成的 ETag 会因服务器而异。
我还不能投票,所以我只能说我同意使用文件路径和时间戳的哈希值(或者如果由数据库内容表示,则为表名+主字段值+时间戳)的建议。
ETags在你的网站生成器前使用某种缓存机制时确实有帮助。浏览器本身不使用它们,它们侦听“(if) modified since”或“age”头结构,据我所知。
无论如何,由于其简单的性质,提供带有ETag的http-header并不是问题。我听说许多Web服务器只需取文件的位置和文件的时间戳,并对此数据进行md5哈希。
例如,我们的软件使用一个简单但有效的ETag。我们软件中的每个“内容单元”(即html、jpeg、gif等)都有一个唯一的ID和版本号(即jpeg的ID为“17”,版本为“2”,这意味着它被更改了一次)。因此,ETag只是字符串“id-version”,这里是“17-2”。下一次更改将是“17-3”,以便缓存器识别更改,完全加载新的内容部分(一次)并将其存储在自己的缓存中。
但是,您也可以使用URL和时间戳(即文件的时间戳)。