阻止 Google Chrome 发送 Sec-Fetch 标头

All*_*ool 7 caching http-headers asp.net-web-api owin owin-middleware

我想在我的 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;
  } 
}
Run Code Online (Sandbox Code Playgroud)

中间件的片段:

if (browserCacheOptions.IsEnable) {
  context.SetCacheControlHeader(browserCacheOptions.MaxAge);
}

await context.Response.WriteAsync(file);
Run Code Online (Sandbox Code Playgroud)

它在 Mozilla 浏览器中工作正常,但在 Chrome 中却不行。

来自 Mozilla 的片段:

在此输入图像描述 在此输入图像描述

我相信其根本原因是 Chrome自动向请求添加了额外的Sec-Fetchheaders + 。cache-control: max-age=0

在此输入图像描述

Chrome 自动添加 Sec-Fetch 标头:

在此输入图像描述 在此输入图像描述

注意:如果在单独的浏览器选项卡中打开相同的请求,则它在 Chrome 中工作正常(sec-fetch请求中没有标头)

问:是否可以以某种方式禁用此类行为,并且不自动将 sec-fetch 标头添加到请求中?

或者如果您有其他建议,请分享。

小智 2

您无法修改sec-,因为它位于禁止标头列表中。这基本上是无法使用客户端脚本修改的标头列表。