【发布时间】:2020-05-20 10:27:44
【问题描述】:
我想在我的 Web API 2(net.framework 4.6.2 应用程序)中缓存静态内容 (index.html)
我编写了 OWIN 中间件,它在响应中添加了 cache-control 标头,从而允许从浏览器缓存中检索后续请求。
OWIN 上下文扩展:
public static class BrowserCacheOwinContextExtensions {
public static IOwinContext SetCacheControlHeader(this IOwinContext context, int maxAge) {
context.Response.Headers["Cache-Control"] = $"public, max-age={maxAge}";
context.Response.Headers["Vary"] = "User-Agent";
return context;
}
}
来自中间件的片段:
if (browserCacheOptions.IsEnable) {
context.SetCacheControlHeader(browserCacheOptions.MaxAge);
}
await context.Response.WriteAsync(file);
它在 Mozilla 浏览器中运行良好,但在 Chrome 中却不行。
来自 Mozilla 的片段:
我认为其根本原因是 Chrome 会自动在请求中添加额外的 Sec-Fetch 标头 + cache-control: max-age=0。
Chrome 自动添加 Sec-Fetch 标头:
注意:如果在单独的浏览器选项卡中打开相同的请求,它在 Chrome 上工作正常(请求中没有 sec-fetch 标头)
问:是否有可能以某种方式禁用此类行为并且不将 sec-fetch 标头自动添加到请求中?
或者如果您有其他建议,请分享。
【问题讨论】:
标签: caching asp.net-web-api http-headers owin owin-middleware