关于CSS和浏览器的快速问题.我尝试搜索SO并发现了一些类似的帖子,但没有任何确定性.
我在我的Web项目中使用一个或两个CSS文件.这些在我的网页的HEAD中引用.一旦我点击其中一个页面,CSS是否会被缓存,以便每次请求都不会重新下载?希望如此.IE,Firefox和Safari处理这种方式有何不同?如果浏览器已关闭,那么在打开新的浏览器实例时,第一次访问时是否会刷新CSS?
您的文件可能会被缓存 - 但这取决于......
不同的浏览器具有稍微不同的行为 - 最明显的是在处理来自服务器的模糊/有限的缓存标头时.如果您发送一个明确的信号,浏览器几乎一直遵守.
到目前为止,最大的差异在于不同Web服务器和应用程序服务器的默认缓存配置.
一些(例如Apache)可能提供已知的静态文件类型,其HTTP标头鼓励浏览器缓存它们,而其他服务器可以发送no-cache
每个响应的命令 - 无论文件类型如何.
...
所以,首先,阅读一些优秀的HTTP缓存教程.对于我来说,内容发布商的HTTP缓存和缓存正在大开眼界:-)
接下来安装并使用Firebug和Live HTTP Headers附件,以找出服务器实际发送的标头.
然后阅读您的Web服务器文档,了解如何将它们调整到完美(或者说您的系统管理员为您做这件事).
...
至于重新启动浏览器时会发生什么,这取决于浏览器和用户配置.
根据经验,希望浏览器在每次重启后更有可能检查服务器,看看是否有任何变化(参见If-Last-Modified和If-None-Match).
如果您正确配置服务器,它应该能够返回超短304未修改(花费很少的带宽),之后浏览器将正常使用缓存.
对于问题的第一部分 - 是的,浏览器缓存css文件(如果浏览器的配置没有禁用它).许多浏览器具有重新加载没有缓存的页面的组合键.如果您对css进行了更改并希望用户立即看到它们而不是等待下次浏览器重新加载文件而不进行缓存,则可以通过向URL添加一些参数来更改CSS服务的方式,如下所示:
/style.css?modified=20012009
它确实依赖于与CSS文件一起发送的HTTP标头,因为两个先前的答案都是状态 - 只要你没有向href附加任何cachebusting东西.例如
一些框架(例如rails)默认将这些框架放入.
但是,如果你得到像firebug或fiddler这样的东西,你可以准确地看到你的浏览器在每个请求上下载的内容 - 这对于找出你的浏览器正在做什么特别有用,而不是它应该做什么.
所有浏览器都应该以相同的方式尊重缓存头,除非配置为忽略它们(但必然会有例外)