Chrome 未利用 .NET 项目缓存的问题我遇到了令人费解的行为

问题描述 投票:0回答:1

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 中的网络流量时,我注意到在初始请求中,响应标头包含预期的缓存控制指令:

要求:

  • 请求网址:https://localhost:8088/Scripts/vue/Components/css/app2.css
  • 请求方式:GET

回应:

  • 状态代码:200 OK
  • 远程地址:[::1]:8088
  • 推荐人政策:跨源时严格源
  • 接受范围:字节
  • 缓存控制:公共,最大年龄=8640000
  • 内容长度:1355294
  • 内容类型:文本/css
  • 日期:2023 年 10 月 29 日,星期日 07:43:59 GMT
  • Etag:“59b46bf2dc7da1:0”
  • 最后修改时间:2023 年 10 月 26 日星期四 07:20:50 GMT
  • 服务器:Microsoft-IIS/10.0

请求标头:

  • :权限:本地主机:8088
  • :方法:获取
  • :路径:/Scripts/vue/Components/css/app2.css
  • :方案:https
  • 接受:文本/css,/;q=0.1
  • 接受编码:gzip、deflate、br
  • 接受语言:en-US,en;q=0.9
  • Cookie:(我的cookie数据)
  • 引用者:https://localhost:8088/Pages/Monitor.aspx
  • Sec-Ch-Ua:“Chromium”;v=“118”,“Google Chrome”;v=“118”,“Not=A?品牌”;v=“99”
  • Sec-Ch-Ua-移动:?0
  • Sec-Ch-Ua 平台:“Windows”
  • Sec-Fetch-Dest:样式
  • Sec-Fetch-Mode:无cors
  • Sec-Fetch-Site:同源
  • 用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/118.0.0.0 Safari/537.36

奇怪的是,在 Firefox 中没有观察到这种行为,它始终按照预期从缓存加载文件。

我尝试通过将不可变指令添加到缓存控制标头来解决此问题,但没有效果。此外,在增加内存限制的情况下运行 Chrome 并没有带来任何改进。我的 Etag 保持不变,最后修改的 ID 没问题。

从更广泛的角度来看,该页面总共发起了 180 个请求。虽然其中大约 70% 是从 Chrome 的内存缓存加载的,但其余的 JavaScript 和 CSS 文件继续从服务器获取。 (谈论那些具有适当缓存控制的内容)。我会提到资产的 Etag 保持不变,并且上次修改时间低于请求时间

我不知道是什么原因导致 Chrome 和 Firefox 之间出现这种差异。任何有关如何解决此问题的见解或建议将不胜感激。

我尝试将不可变添加到缓存控制中。降低最大年龄。最小化资产文件大小。 许多其他尝试都失败了。检查开发和生产环境中的行为。来自不同的计算机。 Mac 和 Windows 上的 Chrome 浏览器。正如我所说。在 Firefox 上一切看起来都很好。

.net google-chrome firefox caching cache-control
1个回答
0
投票

最后我终于明白了 Chrome 中这种行为的原因。这是由于错误的站点证书导致“不安全”错误。仅修复证书有帮助。不是 chrome 安全标志可以绕过这个问题。 修复证书后,所有资产均按预期从缓存加载

© www.soinside.com 2019 - 2024. All rights reserved.