我想知道是否有可能避免请求某些嵌入对象,直接从缓存中加载它们,而不询问 Web 服务器该对象是否有效(我不希望 Web 服务器以 304 http 状态代码响应我)这可能吗? 过期标头以这种方式工作吗? 怎么用?
来自我的 htaccess。
# cache images/pdf docs for 10 days
<FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif|js)$">
Header set Expires "Mon, 31 Dec 2035 12:00:00 gmt"
</FilesMatch>
# cache html/htm/xml/txt diles for 2 days
<FilesMatch "\.(html|htm|xml|txt|xsl)$">
Header set Cache-Control "max-age=7200"
</FilesMatch>
</IfModule>
与 php header 函数以及 httpd.conf 中的操作类似。
我在 apache access.log 中验证了结果。每次我刷新页面时,access.log 文件中都会出现 304 请求。所以,我认为浏览器总是发出请求。
答案1
是的,你应该使用Expires
或Cache-Control: max-age
标头来阻止浏览器再次请求对象。请参阅RFC 2616了解详情。
当缓存可以完全避免向源服务器发出请求时,HTTP 缓存效果最佳。避免请求的主要机制是源服务器提供将来的明确到期时间,表明可以使用响应来满足后续请求。换句话说,缓存无需先联系服务器即可返回新的响应。