c# - MVC - 缓存控制不适用于静态内容
问题描述
在我们的应用程序中,我们希望缓存静态内容,如图像、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>
它仍然不起作用。
我不想使用输出缓存。
有什么选择吗?
解决方案
no-store
完全禁用缓存MDN link#1 , MDN link#2
据我了解,您只需要一个标题:
<add name="Cache-Control" value="no-cache" />
首次加载浏览器加载资源:
注意状态码为 200,响应大小为 8 KB。服务器应添加(IIS
自动执行)Etag
标头(例如Etag: "8099f82b154d41:0"
)然后浏览器缓存文件并保存Etag
值。在下一页重新加载浏览器将该值作为If-None-Match
请求标头(例如If-None-Match: "8099f82b154d41:0"
)发送。服务器检查该值,如果文件未更改,则使用 304 http-code 响应:
注意状态代码为 304,响应大小为 117 B。在这种情况下,使用缓存文件。
如果服务器上的文件将被更改,服务器将响应一个新文件和 200 个 http-code,不会使用缓存。
推荐阅读
- deployment - 我可以为一个 VERCEL 部署配置多个公共目录吗?
- makefile - Makefile 简单规则如何
- github - 每当脚本计划在 Heroku 应用程序中运行时如何更新文件
- python - 自动安装 Chrome 版本的 Chrome 驱动程序
- javascript - CSS 属性在某些移动设备上不起作用
- javascript - 如何发送具有动态值的html电子邮件?
- algorithm - 广度优先搜索算法变体
- python - 从随机生成的数字中采样?
- postgresql - 在 SQL 中创建触发器函数
- javascript - 如何比较对象数组并返回具有匹配和不匹配键值的对象数组