提问人:itay regev 提问时间:10/29/2023 更新时间:11/19/2023 访问量:40
Chrome 未使用 .NET 项目的缓存的问题 我遇到了令人费解的行为
Issue with Chrome not Utilizing Cache for .NET Project I'm encountering a puzzling behavior
问:
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 中的网络流量时,我注意到在初始请求中,响应标头包含预期的缓存控制指令:
请求:
- 请求 URL:https://localhost:8088/Scripts/vue/Components/css/app2.css
- 请求方式:GET
响应:
- 状态代码:200 正常
- 远程地址:[::1]:8088
- 引荐来源政策:strict-origin-when-cross-origin
- Accept-Ranges:字节
- 缓存控制:public,max-age=8640000
- 内容长度:1355294
- 内容类型: text/css
- 日期:2023 年 10 月 29 日星期日 07:43:59 GMT
- Etag:“59b46bf2dc7da1:0”
- 最后修改: Thu, 26 Oct 2023 07:20:50 GMT
- 服务器: Microsoft-IIS/10.0
请求标头:
- :authority: localhost:8088
- :method: 获取
- :p ath: /Scripts/vue/Components/css/app2.css
- :scheme:https
- 接受:text/css,/;q=0.1
- 接受编码:gzip、deflate、br
- 接受语言: en-US,en;q=0.9
- Cookie:(我的 Cookie 数据)
- 推荐人:https://localhost:8088/Pages/Monitor.aspx
- Sec-Ch-Ua:“铬”;v=“118”, “谷歌浏览器”;v=“118”, “不是=A?品牌“;v=“99”
- Sec-Ch-UA-Mobile:?0
- Sec-ch-ua-platform: “Windows”
- Sec-Fetch-Dest:样式
- Sec-Fetch-Mode:无
- Sec-Fetch-Site:同源
- User-Agent:Mozilla/5.0 (Windows NT 10.0;Win64的;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
奇怪的是,在Firefox中没有观察到这种行为,Firefox始终如预期地从缓存中加载文件。
我试图通过将不可变指令添加到缓存控制标头来解决这个问题,但它没有效果。此外,在增加内存限制的情况下运行 Chrome 并没有产生任何改进。我的 Etag 保持不变,最后修改很好。
在更广泛的上下文中,该页面总共发起了 180 个请求。虽然其中大约 70% 是从 Chrome 的内存缓存加载的,但其余的 JavaScript 和 CSS 文件继续从服务器获取。(谈论那些具有适当缓存控制的人)。我会提到资产的 Etag 保持不变,上次修改的时间低于请求时间
我不知道是什么原因导致了Chrome和Firefox之间的这种差异。关于如何解决此问题的任何见解或建议将不胜感激。
我尝试将不可变性添加到 cache-control.lowering max-age。最小化资产文件大小。 许多其他尝试都失败了。检查开发和生产环境中的行为。来自不同的计算机。来自 Mac 和 Windows 的 Chrome 浏览器。正如我所说。在Firefox上一切看起来都很好。
答:
最后,我设法了解了导致chrome中这种行为的原因。这是由于错误的站点证书导致“不安全”错误。只有修复证书才有帮助。不是 chrome 安全标志可以绕过这个问题。 修复证书后,按预期从缓存加载所有资产
评论