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

时间:2018-12-10 10:13:26

标签: c# caching model-view-controller http-headers

在我们的应用程序中,我们想缓存静态内容,例如图像,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>

现在应该验证请求并使用高速缓存(如果已验证)。 但是它不起作用。即使是相同的请求,它仍然会一次又一次地加载静态内容。

我尝试如下在配置中添加自定义代码

<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 :(得分:0)

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

据我了解,您只需要一个标题:

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

在第一次加载时,浏览器会加载资源: enter image description here 通知状态代码为200,响应大小为8 KB。服务器应添加(IIS自动完成)Etag标头(例如Etag: "8099f82b154d41:0") 然后浏览器缓存文件并保存Etag值。 在下一页的重新加载中,浏览器将该值作为If-None-Match请求标头发送(例如If-None-Match: "8099f82b154d41:0")。服务器检查该值,如果文件未更改,则以304 HTTP代码响应: enter image description here 通知状态代码为304,响应大小为117B。在这种情况下,将使用缓存的文件。

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