Chrome 似乎忽略了某些静态文件的缓存指令。这是我使用 IIS 时 web.config 的相关摘录:
<location path="Scripts">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
<system.webServer>
<staticContent>
<clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="100.00:00:00" />
</staticContent>
</system.webServer>
</location>
我有一个名为 app2.css 的文件,用于从 ASPX 文件加载的示例,如下所示:
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<link href="/Themes/General/css/ant.css" rel="stylesheet" type="text/css"/>
<link href="../Scripts/vue/Components/css/app2.css" rel="stylesheet" type="text/css" />
</asp:Content>
在检查 Chrome 中的网络流量时,我注意到在初始请求中,响应标头包含预期的缓存控制指令:
要求:
回应:
请求标头:
奇怪的是,在 Firefox 中没有观察到这种行为,它始终按照预期从缓存加载文件。
我尝试通过将不可变指令添加到缓存控制标头来解决此问题,但没有效果。此外,在增加内存限制的情况下运行 Chrome 并没有带来任何改进。我的 Etag 保持不变,最后修改的 ID 没问题。
从更广泛的角度来看,该页面总共发起了 180 个请求。虽然其中大约 70% 是从 Chrome 的内存缓存加载的,但其余的 JavaScript 和 CSS 文件继续从服务器获取。 (谈论那些具有适当缓存控制的内容)。我会提到资产的 Etag 保持不变,并且上次修改时间低于请求时间
我不知道是什么原因导致 Chrome 和 Firefox 之间出现这种差异。任何有关如何解决此问题的见解或建议将不胜感激。
我尝试将不可变添加到缓存控制中。降低最大年龄。最小化资产文件大小。 许多其他尝试都失败了。检查开发和生产环境中的行为。来自不同的计算机。 Mac 和 Windows 上的 Chrome 浏览器。正如我所说。在 Firefox 上一切看起来都很好。
最后我终于明白了 Chrome 中这种行为的原因。这是由于错误的站点证书导致“不安全”错误。仅修复证书有帮助。不是 chrome 安全标志可以绕过这个问题。 修复证书后,所有资产均按预期从缓存加载