当我刷新我的网站时,样式表没有更新

79

我正在创建一个网站,但当我更改了网站上的样式表后,刷新网站时没有任何更改。

我试着使用“查看源代码”工具来检查stylesheet.css,但它也没有更新。但是当我转到系统根目录时,它已经被更新了。

在我看到我的网站更新之前,我必须等待至少20分钟,有人能告诉我为什么不能立即看到更改吗?是我的浏览器、计算机还是服务器出了问题?

我还尝试删除我的Cookie、缓存和历史记录,但仍然无效。

16个回答

222

如果您的网站还没有上线,并且只是想在自己满意的间隔时间内更新样式表,请使用此方法:Ctrl + F5

在Mac OS中(在Chrome浏览器中),请使用: Cmd + Shift + R

这将强制浏览器重新加载并刷新与网站页面相关的所有资源。

因此,每次更改样式表并查看新结果时,请使用此方法。


7
按住Shift键并同时点击刷新按钮会强制浏览器下载服务器上的所有文件;清除缓存并更新到任何更新版本。SHIFT/REFRESH在Mac/PC上均有效....适用于任何操作系统,任何浏览器。 - flipflopmedia

59
最有可能的情况是文件被服务器缓存了。您可以禁用缓存(但记得在网站上线时启用它),或修改link标签的href,这样服务器就不会从缓存中加载它。
如果您的页面是由一些像php这样的语言动态创建的,您可以在href值的末尾添加一些变量,例如:
<link rel="stylesheet" type="text/css" href="css/yourStyles.css?<?php echo time(); ?>" />

这将在文件路径末尾添加当前时间戳,以使其始终唯一且不会从缓存中加载。

如果您的页面是静态的,则必须自己管理这些变量,因此请使用类似以下的内容:

<link rel="stylesheet" type="text/css" href="css/yourStyles.css?version=1" />

在对文件内容进行更改后,将version=1更改为version=2等等。
如果您希望禁用缓存以避免缓存CSS文件,请参考您的服务器类型文档(Apache、IIS、Nginx等处理方式不同)。或者在https://serverfault.com/上寻求帮助或搜索问题。
假设是IIS - 在<system.webServer>下添加适当设置的键到根目录或相关文件夹即可解决问题。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <caching enabled="false" enableKernelCache="false" /> <!-- This one -->
    </system.webServer>
</configuration>

有时候,为了使CSS生效,仍需要重新启动应用程序池。因此,仅禁用IIS缓存并不能百分之百地解决问题。
对于浏览器来说,如果感兴趣的话,可以在SuperUser上查看一些关于细粒度控制Firefox本地缓存的说明。

由客户端缓存而非服务器缓存。 - JWC May
你救了我的一天,谢谢!它也适用于JavaScript脚本。 - Mathieu

16

检测文件是否被缓存的最简单方法是向 <link /> 元素附加一个查询字符串,这样浏览器将重新加载它。

要做到这一点,您可以将样式表引用更改为类似以下内容:

<link rel="stylesheet" type="text/css" href="/css/stylesheet.css?v=1" />

注意v=1部分。每次创建新版本时,您可以更新此部分以查看是否确实已被缓存。


2
为了在这里添加内容,而不是每次更改数字v=1,设置v=Math.random()。因此,每次它将生成一个新的数字。 - Darshan Jain

2
这可能不是原帖作者的问题,但我遇到了相同的问题,并通过在我的cpanel上清除缓存并禁用超级缓存来解决它。也许像我这样的一些新手不知道许多托管提供商会缓存CSS和其他静态文件,这些缓存的旧版本CSS文件将在您编辑服务器上的文件后在云中持续数小时。如果您编辑CSS文件后网站提供旧版本的CSS文件,并且您确定已清除浏览器缓存,并且您不知道您的主机是否正在缓存内容,请先检查此问题,然后再尝试任何其他更复杂的建议。

1
好的信息。虽然假定使用cpanel,但问题或标签中没有提到cpanel。 - twobob

2
我曾经遇到过类似的问题,这个问题的麻烦之处在于更新非常慢。我试了各种清除浏览器缓存和cookie的方法,但无论如何我的更改都没有生效。但是,如果我一天后再回到网站或打开另一个浏览器,更改就生效了。
我解决这个问题的方法是,在我的主机cpanel(Siteground)中禁用了Supercacher软件。您还可以使用“flush”按钮来测试单个目录是否有问题,然后再禁用它。

1
如果文件被缓存在服务器上,那么在浏览器中你无法做任何事情来解决这个问题。你必须等待服务器重新加载文件。你甚至不能删除文件并重新上传它。如果你使用像Cloudflare这样的缓存服务器,这可能需要更长的时间(它甚至可以在服务器重启后仍然存在)。你可以将其重命名并加载一个副本。

我猜这可能是检查CloudFlare或CDN上缓存内容的更好选择。 - Dinesh Suthar

1
我遇到了相同的问题,我使用 000webhost 来托管我的网站,同时也使用了 cloudflare。 我已经从浏览器中禁用了所有缓存设置,然后尝试更改一些 CSS,并使用硬刷新(Shift + 单击刷新按钮,Ctrl + F5 等)重新加载页面,但是没有任何变化
原来这个问题来源于 cloudflare 缓存。如果您正在使用 cloudflare,则可以在 cloudflare 中启用开发模式,这将暂时绕过您的缓存,让您实时查看对源服务器的更改。
对于仍然遇到此问题的人,希望这能帮到您。

1
在我的情况下,由于我无法向CSS URL附加缓存破坏时间戳,结果我不得不手动刷新IIS 7.5.7600中的应用程序池。已经尝试了所有其他途径,一直到完全禁用站点和本地浏览器的缓存(像完全禁用两者),仍然没有起作用。同样地,“重新启动”网站也没有任何作用。
和我处于相同位置吗?[站点名称] >“应用程序池”>“回收”是你的最后选择...

0

这可能是您的服务器配置的结果,一些托管提供商在您的域上启用"Varnish"。这个缓存HTTP反向代理用于加快交付速度。可以尝试在cpanel上禁用varnish(假设您有一个),然后查看是否是这个问题。


0

我也遇到了同样的问题,我清除了浏览器缓存和Cookie,然后它就自动正常运行了。


一些现有的答案已经提到了这一点。请让您的帖子的额外贡献更加明显。否则,这被视为对其他答案的“感谢”。这反过来意味着您的帖子不是答案,应该被删除。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接