为了防止问题,当我更新CSS / JS媒体文件和浏览器不要求新版本,因为他们caching这些文件,我使用这个解决scheme: https : //github.com/jaddison/django-cachebuster ,增加?<文件的时间戳>到CSS / JS文件名(用/media/main.css?20012931203128replace/media/main.css。我认为它会迫使浏览器在更改时间戳(更新文件)时重新加载css文件,并使用本地caching版本但是我在Apache日志(和firebug)中看到的是,浏览器(至less是Firefox)在每次刷新页面时都会请求CSS / JS文件,即使获得了304代码,也可以看到来自日志的片段:
XXX.255.115.60 - - [24/Jul/2011:04:17:25 -0700] "GET /media/main.css?333900240611 HTTP/1.1" 304 172 "" "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" XXX.255.115.60 - - [24/Jul/2011:04:17:26 -0700] "GET /media/main.js?270101180511 HTTP/1.1" 304 173 "" "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" XXX.255.115.60 - - [24/Jul/2011:04:17:34 -0700] "GET /media/main.css?333900240611 HTTP/1.1" 304 172 "" "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" XXX.255.115.60 - - [24/Jul/2011:04:17:35 -0700] "GET /media/main.js?270101180511 HTTP/1.1" 304 173 "" "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" XXX.255.115.60 - - [24/Jul/2011:04:17:44 -0700] "GET /media/main.css?333900240611 HTTP/1.1" 304 172 "" "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" XXX.255.115.60 - - [24/Jul/2011:04:17:44 -0700] "GET /media/main.js?270101180511 HTTP/1.1" 304 173 "" "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
当然,这会让我的网站变慢。 是否有可能强制浏览器更新文件只有当.css?…之后的时间戳更改? 谢谢!
请求@H_404_8@
如何获得用Apache HttpClient 4上传文件的进度条?
为MQSeries编写Java客户端的最低要求是什么?
oracle查询 – ORA-01652:无法扩展临时段,但仅在某些版本的sql * plus中
从Windows 7 64位连接到32位Oracle数据库
Ansible的Windows客户端或Ansible Linux服务器的主机? 可能?
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18 Accept text/css,*/*;q=0.1 Accept-Language en-gb,en;q=0.5 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Referer DNT 1 Connection keep-alive If-Modified-Since Fri,24 Jun 2011 05:39:33 GMT if-none-match "8ed02f1-a21-4a66ea04f2f40"
响应@H_404_8@
Date Sun,24 Jul 2011 12:28:21 GMT Server Apache Connection Keep-Alive Keep-Alive timeout=2,max=99 Etag "8ed02f1-a21-4a66ea04f2f40"
初始和响应@H_404_8@
Date Sun,24 Jul 2011 12:51:05 GMT Server Apache Last-Modified Fri,24 Jun 2011 05:39:33 GMT Etag "8ed02f1-a21-4a66ea04f2f40" Accept-Ranges bytes Content-Length 2593 Keep-Alive timeout=2,max=99 Connection Keep-Alive Content-Type text/css
如何成功使用RDAP协议而不是whois
Debian Samba – 受保护和公共文件夹的混合 – Win 7客户端
replaceWindows桌面
如何从networkingWeb服务器在networking客户端上创build文件
破损的pipe道仅在第二次发送时closures套筒
您应该使用适当的HTTP缓存指令来使响应永不过期 (将来一年):
Cache-Control: max-age=31536000 Expires: Sun,24 Jul 2012 12:51:05 GMT
你可以在Apache中用mod_expires来做到这一点:
ExpiresByType text/css "Now plus 1 year" ExpiresByType text/javascript "Now plus 1 year"
我玩了很多,我发现它可能是由Apache的错误@H_404_8@引起的。 这不是浏览器的问题 – 一旦timesatmp在查询字符串中,浏览器就不能理解查询字符串,并且至少要询问服务器是否没有改变。 Apache响应良好,'304没有修改',但它总是发送文件!
我做了很多实验,唯一能解决问题的方法就是把时间戳直接放在文件名上@H_404_8@ 。 在PHP中,我使用以下函数:
function safe_inline_url($file) { $basename = basename($file); if (strstr($basename,'.')) return dirname($file) . "/" . preg_replace('/(.[^.]*)$/','_ts_' . filemtime($file) . '1',$basename); else return $file . '_ts_' . filemtime($file); }
修改任何内联网址(CSS,JS,图像,…),以便它添加时间戳,例如。 像js / forms.js@H_404_8@ => js / forms_ts_1278080148.js@H_404_8@ 。
在服务器上,您必须将修改过的文件名重新写回到真实名称,这是通过将这个名称放到您的.htaccess文件中完成的:
RewriteEngine On RewriteCond %{REQUEST_URI} ^(.*)_ts_[0-9]{9,}$ RewriteRule ^ %1 [PT] RewriteCond %{REQUEST_URI} ^(.*)_ts_[0-9]{9,}.(.*)$ RewriteRule ^ %1.%2 [PT]
你把它放到根目录下,你也必须把它放到RewriteEngine On的每个子目录的.htaccess@H_404_8@ 。
唯一的问题是使用URL来包含其他来源的scriptaculous JavaScript库 – 你不能使用这个技巧来包含他们的js文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。