关于动态缓存和静态缓存的绝对、最佳使用的一些问题。
目前,我的htaccess
设置如下,我感觉我并没有真正以正确的方式使用它... 您的任何改进建议我都会视为答案!非常感谢!
问题1:为了使两个级别(#### 动态 / #### 静态)内的缓存更加正确,有什么建议我应该进行更改吗?
问题2:这些 IF 标签有什么作用:<IfModule mod_headers.c> ... </IfModule>
是否建议保留?没有它似乎也可以。使用它是否有速度优势?
问题 3: 我应该同时使用两者ExpiresDefault M7200
还是Header set Cache-Control "max-age=7200"
只使用其中一个就可以?
<IfModule mod_headers.c>
ExpiresActive On
Header unset ETag
FileETag None
Header unset Pragma
ExpiresDefault M14515200
##### DYNAMIC PAGES
<FilesMatch "\\.(htm|php)$">
ExpiresDefault M7200
Header set Cache-Control "max-age=7200"
</FilesMatch>
##### STATIC FILES
<FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$">
ExpiresDefault M14515200
Header set Cache-Control "max-age=14515200"
</FilesMatch>
</IfModule>
答案1
首先回答问题 2,<IfModule> 包装器的存在是为了让您的配置在不包含 mod_headers 的 Apache 实例上仍然有效(尽管没有设置标头的位)。如果没有包装器,没有 mod_headers 的 Apache 实例在启动时会失败。
对于问题 3,Web 服务器同时设置了 Expires 和 Cache-Control 标头,因为缓存标头的历史记录很长且很混乱,同时覆盖它们是让尽可能多的最终用户尊重您的缓存生存期的最佳选择。99% 的时间,任何一个都足够(在这种情况下,您也可以使用 max-age,并将确定从现在起 7200 分钟后的 CPU 工作负载推送到用户的浏览器而不是您的服务器上)。
对于问题 1,如果您的 .htm 和 .php 页面确实是动态的(内容取决于用户是谁或他们正在做什么),那么您根本不应该允许缓存它们。.xml 文件通常由您的代码生成,如果是这样,那么它们可能应该包含在动态内容而不是静态内容中。并且,只有当您已采取措施确保它们确实是静态的,并且您永远不能在保持相同文件名的情况下更改文件内容时,才可以为您的“静态”文件提供如此长的生命周期。特别是,如果您更改 JavaScript 或 CSS 文件,那么用户将看到意外的结果,具体取决于他们缓存了什么和没有缓存什么。