我很难决定是否将Apaches的内置ETags或Expires / Cache-Control组合用于我的静态文件(.js,.png等)。
我正在运行单服务器设置,没有什么奇特的。
我大部分都明白它是如何工作的,而且我已经有两个设置在运行,一路上调整了不同的东西。
他们看起来非常相似。 关于我能find的唯一区别是Apaches的ETag不允许您定义组件到期之前的时间量。 此外,当使用ETags时,如果文件没有被修改,我会看到每个组件的新请求导致304。
由于这些原因,我倾向于使用Expires / Cache-Control组合,但是您认为使用哪个组合?
这取决于您的文件更改的频率。 它们会经常更改, Expires / Cache-Control组合可能会为您的客户提供延迟以获取新内容。 另一方面, ETag确保了每个请求的caching重新validation,这将确保您的客户始终获得最新的内容。
如果您有机会使用多服务器设置,我build议您调整FileETag指令(至less删除INode选项),因为它可能会在不同的服务器上生成不同的ETag 。
这取决于你如何引用你的静态内容。 我在大多数静态文件中放置了10年过期设置,但是在所有情况下,这些设置都是使用时间戳的查询string格式从dynamic内容引用的。 由于这与使用包含文件的时间戳作为标记一部分的ETag大致相同,我build议纯静态configuration使用ETags。
另外请注意,您现在可以selectETags,然后切换。 这是无害的。 你也可以一起做所有不同的方法。 我相信Ruby on Rails会自动跳舞,etags和caching控制,并且可以混合搭配。 对于特定的静态configuration,我无法想象你需要做所有的事情,但是做多个事情并没有什么坏处。
我会说很难从caching中获得一个远期的Expires标题,但其余的很容易。 这取决于您愿意接受多lessstream量,因为从远程caching中删除最难的是stream量效率。