非常感谢任何建议。
答案 0 :(得分:5)
阅读http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx了解背景信息。
答案 1 :(得分:2)
对于服务器响应标头中未提供的expires
,请参见此处的§14.21:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
即使提供,expires
也会被max-age
指令覆盖,因此如果未提供expires
,则会使用max-age
。如果没有提供,请参见§13.2.4:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2.4
基本上它表示客户端可以在不确定的时间段内设置缓存,而不是始终如一。
要解决您的问题,您可能会说静态元素永不过期,并为HTML文档中包含的元素添加过期时间。要做到这一点,请看这里: http://www.tipsandtricks-hq.com/how-to-add-far-future-expires-headers-to-your-wordpress-site-1533
引用:“要为图片添加过期标头,CSS,javascript文件会将以下内容添加到您的.htaccess
文件中
过期标题
> <FilesMatch "\.(ico|jpg|jpeg|png|gif|js|css|swf)$">
> ExpiresDefault "access plus 2 hours"
> </FilesMatch>
或过期图片标题
> ExpiresActive On
> ExpiresDefault A0
> ExpiresByType image/gif A2592000
[...] 请记住,当您使用expires标头时,文件将缓存在浏览器中,直到它过期,因此请勿在经常更改的文件上使用此文件。如果您更改/更新远期到期的文件(例如CSS或javascript文件),那么您应该重命名该文件并使用重命名的版本,以便浏览器不会获取旧文件。“
答案 2 :(得分:1)
就你的第二个问题而言,我觉得这个资源很有意思:
http://blogs.oracle.com/cwebster/entry/caching_static_resources_in_glassfish
这里提出的解决方案不仅仅是配置,还需要实现和使用过滤器。
答案 3 :(得分:0)
无论是否设置了Expires标头,执行的实际操作都依赖于实现。这只是对浏览器的建议,任何给定浏览器的任何给定版本都可以随意忽略它。
对于问题3,您可以附加一个查询字符串,该字符串是版本号,最后修改日期(如果您的样式表或javascript每天更改一次,您没有正确使用测试或登台),或者文件的当前校验和。例如,您可以使用
代替site.css
<link rel="stylesheet" href="site.css?lastmodified=20110605">
或
<link rel="stylesheet"
href="site.css?sha1sum=da39a3ee5e6b4b0d3255bfef95601890afd80709">
答案 4 :(得分:0)
这不是一个完整的答案,但在答案中比在评论中更容易格式化输出。
Last-Modified
标头,那么浏览器不需要expires
标头来缓存内容并知道它何时过期。expires
标题是不需要来缓存页面,当您知道可能的到期日期时(例如,如果它是每日),它实际上意味着动态内容生成图)。文档过期的方法有很多种。例如,如果指定了文档Last-Modified
标题并且内容长度已知,则浏览器可以缓存页面,下次可以使用If-Modified-Since
标题,这将导致304 Not Modified
,因此浏览器可以显示缓存的内容。因此,如果Last-Modified不用担心 - 浏览器将始终显示新版本(极少数例外)