脚本宝典收集整理的这篇文章主要介绍了php – 为什么浏览器要求缓存文件?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
# BEgin ComPress text files <ifModule mod_deflate.c> <filESMatch "\.(css|js|x?htML?|PHP)$"> SetOutputFilter DEFLATE </filesMatch> </ifModule> # END ComPRess text files # BEGIN Expire headers <ifModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 seconds" ExpiresByTyPE image/x-icon "access plus 86400 seconds" ExpiresByType image/jpeg "access plus 86400 seconds" ExpiresByType image/png "access plus 86400 seconds" ExpiresByType image/gif "access plus 86400 seconds" ExpiresByType application/x-shockwave-flash "access plus 86400 seconds" ExpiresByType text/css "access plus 86400 seconds" ExpiresByType text/javascript "access plus 86400 seconds" ExpiresByType application/javascript "access plus 86400 seconds" ExpiresByType application/x-javascript "access plus 86400 seconds" ExpiresByType text/html "access plus 600 seconds" ExpiresByType application/xhtml+XMl "access plus 600 seconds" </ifModule> # END Expire headers # BEGIN Cache-Control Headers <ifModule mod_headers.c> <filesMatch "\.(ico|jpe?g|png|gif|swf)$"> Header set Cache-Control "max-age=86400,public" </filesMatch> <filesMatch "\.(css)$"> Header set Cache-Control "max-age=86400,public" </filesMatch> <filesMatch "\.(js)$"> Header set Cache-Control "max-age=86400,private" </filesMatch> <filesMatch "\.(x?html?|PHP)$"> Header set Cache-Control "max-age=600,private,must-revalidate" </filesMatch> </ifModule> # END Cache-Control Headers # BEGIN Turn ETags Off <ifModule mod_headers.c> Header unset ETag </ifModule> FileETag None # END Turn ETags Off # BEGIN Remove Last-Modified Header <ifModule mod_headers.c> Header unset Last-Modified </ifModule> # END Remove Last-Modified Header
(摘自here)
我正在使用Chrome进行测试,我注意到应该缓存的CSS文件确实没有缓存:
Accept:text/css,*/*;q=0.1 Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:es-ES,es;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Cookie:sua_language=en; keep=0; user=0; PHPSESSID=hn5gt5nb1j4sfq1j6m40un3IT6; language=es Host:podo.COM If-Modified-Since:Tue,01 Nov 2011 17:20:59 GMT Referer:http://podo.com/sheet?id=48 User-Agent:Mozilla/5.0 (X11; Linux i686) Applewebkit/534.30 (KHTML,like Gecko) Chrome/12.0.742.53 Safari/534.30
并且响应是:
Cache-Control:max-age=86400,public Connection:Keep-Alive Date:Tue,28 Feb 2012 17:50:04 GMT Expires:Wed,29 Feb 2012 17:50:04 GMT Keep-Alive:timeout=5,max=99 Server:apache/2.2.15 (Unix) DAV/2 PHP/5.2.10 VARy:Accept-Encoding
// Set document header header('Content-type: text/javascript; charset=UTF-8'); $expires = ONE_DAY; header("Pragma: public"); header("Cache-Control: maxage=".$expires); header('Expires: ' . gmdate('D,d M Y H:i:s',time()+$expires) . ' GMT');
我注意到如果我评论这些行并重新加载页面(而不是通过按F5,使用导航按钮),一些(不是所有)Javascript文件具有与CSS文件相同的行为(被迫重新加载).
发生了什么?为什么CSS文件永远不会被缓存?为什么JS文件有时会被缓存,有时候不是?
更新:我发现如果我评论该行< ifModule mod_expires.c>并且它对应的结束标记,一切都按预期工作,它是,不要求CSS文件(与JS文件一样).现在的问题是:为什么?
更新2:第一次收到CSS文件时的响应头(200响应):
Accept-Ranges:bytes Cache-Control:max-age=86400,public Connection:Keep-Alive Content-Encoding:gzip Content-Length:1633 Content-Type:text/css Date:Thu,01 Mar 2012 16:01:53 GMT Expires:Fri,02 Mar 2012 16:01:53 GMT Keep-Alive:timeout=5,max=99 Server:Apache/2.2.15 (Unix) DAV/2 PHP/5.2.10 Vary:Accept-Encoding
请求标头是相同的.
If-Modified-Since: Tue,01 Nov 2011 17:20:59 GMT
Chrome正在要求服务器发送该文件的新副本,当且仅当它自2011年11月1日星期二格林尼治标准时间17:20:59之后被修改.
此处的预期响应将是以下两种情况之一:如果文件已被修改,则服务器应使用200 OK响应代码在响应正文中返回新版本.如果文件尚未修改,服务器应该提供304 Not Modified响应,并且响应的主体将为空 – 如果您查看控制台中显示的响应代码,您将看到这是正在发生的事情.
有关更多信息,请参阅Rfc2616的this section和this section.
脚注:有趣的是,我之前没有观察过,我不能轻易解释为什么私有资源用于重新检查服务器,而公共资源则没有.至少,这是我假设发生的事情,因为您的JS文件是直接从缓存中使用而您的CSS文件不是.
以上是脚本宝典为你收集整理的php – 为什么浏览器要求缓存文件?全部内容,希望文章能够帮你解决php – 为什么浏览器要求缓存文件?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。