关于CSS和浏览器的快速问题。我试着搜索SO,发现了一些类似的帖子,但没有确定的。我在我的网络项目中使用了一两个CSS文件。这些文件在我的网页的HEAD中引用。一旦我点击了我的一个页面,CSS是否会被缓存,这样它就不会随着每次请求而被重新下载?我希望如此。IE、Firefox和Safari处理这个问题的方式是否不同?如果浏览器关闭,CSS是否会在第一次访问时刷新,然后打开一个新的浏览器示例?
2q5ifsrm1#
您的文件将 * 可能 * 被缓存-但这取决于...不同的浏览器有稍微不同的行为-最明显的是当处理服务器发出的模糊/有限的缓存头时。如果你发送一个明确的信号,浏览器会服从,几乎所有的时间。到目前为止,差异最大的是不同Web服务器和应用程序服务器的默认缓存配置。有些服务器(例如Apache)可能会提供已知的静态文件类型,并带有HTTP头,鼓励浏览器缓存它们,而其他服务器可能会在每次响应时发送no-cache命令-无论文件类型如何。...所以,首先,阅读一些优秀的HTTP caching tutorials。HTTP Caching & Cache-Busting for Content Publishers让我真实的开眼界:-)接下来安装并摆弄Firebug和Live HTTP Headers插件,以找出服务器实际发送的是哪些报头。然后阅读您的Web服务器文档,了解如何将它们调整到完美(或说服您的系统管理员为您做这件事)。...至于重新启动浏览器时会发生什么情况,这取决于浏览器和用户配置。根据经验,每次重新启动后,浏览器更有可能签入服务器,以查看是否有任何更改(请参见If-Last-Modified和If-None-Match)。如果您正确配置了服务器,它应该能够返回一个超短的304 Not Modified(占用很少的带宽),之后浏览器将正常使用该高速缓存。
no-cache
pprl5pva2#
对于你问题的第一部分--是的,浏览器缓存css文件(如果浏览器的配置没有禁用的话)。许多浏览器都有组合键来重载没有缓存的页面。如果你对css做了修改,并且希望用户能立即看到这些修改,而不是等到下次浏览器重载没有缓存的文件时,你可以通过在url中添加一些参数来改变CSS的服务方式,如下所示:
/style.css?modified=20012009
cgyqldqp3#
正如前面的两个答案所指出的,它确实依赖于与CSS文件一起发送的HTTP头. -只要你不向href附加任何缓存破坏的东西。
<link href="/stylesheets/mycss.css?some_var_to_bust_cache=24312345" rel="stylesheet" type="text/css" />
一些框架(如rails)默认情况下会将这些放在里面。然而,如果你得到了像firebug或fiddler这样的东西,你可以确切地看到你的浏览器在每个请求中下载了什么--这对于找出你的浏览器正在做什么,而不仅仅是它应该做什么特别有用。所有浏览器都应该以同样的方式尊重该高速缓存头,除非配置为忽略它们(但肯定会有例外)
w46czmvw4#
值得注意的是,IE不会缓存其他css文件使用@import方法调用的css文件,因此,例如,如果你的html页面链接到“master.css”,它通过@import拉入“reset.css”,那么reset.css就不会被IE缓存。
c7rzv4ha5#
这取决于你发送CSS文件的头文件。检查你的服务器配置,因为你可能不会手动发送它们。在谷歌上搜索“http缓存”,了解你可以设置的不同缓存选项。你可以强迫浏览器在每次加载文件时下载一个新的副本,或者你可以缓存文件一周...
2g32fytz6#
除非你的服务器有问题,否则它是缓存的。所有的浏览器都应该处理相同的文件。有些人(比如我)可能会配置他们的浏览器,这样它就不会缓存任何文件。关闭浏览器不会使该高速缓存中的文件无效。但是,在服务器上更改文件应该会导致文件刷新。
klh5stk17#
浏览器缓存是一回事。但第二件事是服务器缓存。如果你的服务器支持CDN服务(内容交付网络),你的网页文件可以缓存在一个或多个服务器上。即使你清除浏览器缓存,添加版本或其他参数到linkrel网址,你和其他用户的浏览器将仍然从服务器缓存加载页面,而不是从更新文件。我有这个问题,我的服务器已打开CDN默认.每次我更新一些css文件需要清除服务器缓存,否则浏览器仍然加载旧版本.有一个特殊的按钮,在服务器控制面板称为“清除CDN缓存”.该页面加载更新后,我相信同样是为其他用户.检查您的服务器的控制面板类似的选项或写信给服务器支持团队如何打开CDN或不允许缓存。.htaccess文件的设置也很有用:
Header set Cache-Control "no-cache, no-store, private, must-revalidate"
它不允许缓存文件。但我不知道它是否适用于每种服务器类型(Apache应该适用)。
7条答案
按热度按时间2q5ifsrm1#
您的文件将 * 可能 * 被缓存-但这取决于...
不同的浏览器有稍微不同的行为-最明显的是当处理服务器发出的模糊/有限的缓存头时。如果你发送一个明确的信号,浏览器会服从,几乎所有的时间。
到目前为止,差异最大的是不同Web服务器和应用程序服务器的默认缓存配置。
有些服务器(例如Apache)可能会提供已知的静态文件类型,并带有HTTP头,鼓励浏览器缓存它们,而其他服务器可能会在每次响应时发送
no-cache
命令-无论文件类型如何。...
所以,首先,阅读一些优秀的HTTP caching tutorials。HTTP Caching & Cache-Busting for Content Publishers让我真实的开眼界:-)
接下来安装并摆弄Firebug和Live HTTP Headers插件,以找出服务器实际发送的是哪些报头。
然后阅读您的Web服务器文档,了解如何将它们调整到完美(或说服您的系统管理员为您做这件事)。
...
至于重新启动浏览器时会发生什么情况,这取决于浏览器和用户配置。
根据经验,每次重新启动后,浏览器更有可能签入服务器,以查看是否有任何更改(请参见If-Last-Modified和If-None-Match)。
如果您正确配置了服务器,它应该能够返回一个超短的304 Not Modified(占用很少的带宽),之后浏览器将正常使用该高速缓存。
pprl5pva2#
对于你问题的第一部分--是的,浏览器缓存css文件(如果浏览器的配置没有禁用的话)。许多浏览器都有组合键来重载没有缓存的页面。如果你对css做了修改,并且希望用户能立即看到这些修改,而不是等到下次浏览器重载没有缓存的文件时,你可以通过在url中添加一些参数来改变CSS的服务方式,如下所示:
cgyqldqp3#
正如前面的两个答案所指出的,它确实依赖于与CSS文件一起发送的HTTP头. -只要你不向href附加任何缓存破坏的东西。
一些框架(如rails)默认情况下会将这些放在里面。
然而,如果你得到了像firebug或fiddler这样的东西,你可以确切地看到你的浏览器在每个请求中下载了什么--这对于找出你的浏览器正在做什么,而不仅仅是它应该做什么特别有用。
所有浏览器都应该以同样的方式尊重该高速缓存头,除非配置为忽略它们(但肯定会有例外)
w46czmvw4#
值得注意的是,IE不会缓存其他css文件使用@import方法调用的css文件,因此,例如,如果你的html页面链接到“master.css”,它通过@import拉入“reset.css”,那么reset.css就不会被IE缓存。
c7rzv4ha5#
这取决于你发送CSS文件的头文件。检查你的服务器配置,因为你可能不会手动发送它们。在谷歌上搜索“http缓存”,了解你可以设置的不同缓存选项。你可以强迫浏览器在每次加载文件时下载一个新的副本,或者你可以缓存文件一周...
2g32fytz6#
除非你的服务器有问题,否则它是缓存的。所有的浏览器都应该处理相同的文件。有些人(比如我)可能会配置他们的浏览器,这样它就不会缓存任何文件。关闭浏览器不会使该高速缓存中的文件无效。但是,在服务器上更改文件应该会导致文件刷新。
klh5stk17#
浏览器缓存是一回事。
但第二件事是服务器缓存。如果你的服务器支持CDN服务(内容交付网络),你的网页文件可以缓存在一个或多个服务器上。即使你清除浏览器缓存,添加版本或其他参数到linkrel网址,你和其他用户的浏览器将仍然从服务器缓存加载页面,而不是从更新文件。
我有这个问题,我的服务器已打开CDN默认.每次我更新一些css文件需要清除服务器缓存,否则浏览器仍然加载旧版本.有一个特殊的按钮,在服务器控制面板称为“清除CDN缓存”.该页面加载更新后,我相信同样是为其他用户.检查您的服务器的控制面板类似的选项或写信给服务器支持团队如何打开CDN或不允许缓存。
.htaccess文件的设置也很有用:
它不允许缓存文件。但我不知道它是否适用于每种服务器类型(Apache应该适用)。