首页 文章

MVC - 缓存控件不适用于静态内容

提问于
浏览
1

在我们的应用程序中,我们想缓存静态内容,如图像,CSS等 . 出于安全原因,我们添加了HTTP标头 -

<httpProtocol>
  <customHeaders>
    <!-- Add custom headers to not allow the page content to be cached -->
    <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
    <add name="Pragma" value="no-cache" />
    <add name="Expires" value="0" />
  </customHeaders>
</httpProtocol>

现在假设验证请求并使用缓存(如果已验证) . 但它不起作用 . 即使是同一个请求,它仍会一次又一次地加载静态内容 .

我尝试在config中添加自定义代码,如下所示

<staticContent>
  <clear/>
  <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:10:00" />
  <mimeMap fileExtension=".jpg" mimeType="image/jpg"/>
  <mimeMap fileExtension=".png" mimeType="image/png"/>
  <mimeMap fileExtension=".css" mimeType="text/css"/>
  <mimeMap fileExtension=".js" mimeType="text/javascript"/>
</staticContent>

它仍然无效 .

我不想使用outputcache .

有没有可用的选择?

1 回答

  • 0

    no-store 完全禁用缓存MDN link#1MDN link#2

    据我所知,你只需要一个 Headers :

    <add name="Cache-Control" value="no-cache" />
    

    首先加载浏览器加载资源:通知状态代码为200,响应大小为8 KB . 服务器应该添加( IIS 自动执行) Etag header(e.x. Etag: "8099f82b154d41:0" )然后浏览器缓存该文件并保存 Etag 值 . 在下一页上,重新加载浏览器将该值作为 If-None-Match 请求标头(e.x. If-None-Match: "8099f82b154d41:0" )发送 . 服务器检查该值,如果文件未更改,则响应304 http-code:通知状态代码为304,响应大小为117 B.在这种情况下,使用缓存文件 .

    如果在服务器上更改文件,服务器将使用新文件和200个http代码进行响应,不会使用缓存 .

相关问题