You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service返回错误Cache-Control响应头问题咨询

核心原因

你当前的自定义中间件执行逻辑顺序错误,先修改响应头再执行后续中间件,后续的静态文件中间件、Azure生产环境默认配置等逻辑会覆盖你预先设置的Cache-Control头,本地开发环境未触发覆盖规则所以配置生效,Azure生产环境触发了覆盖逻辑导致配置不生效。

解决方案

  • 修正中间件的执行逻辑和顺序
    调整自定义中间件的逻辑,先执行后续中间件等待响应生成完成后,再修改响应头,同时将该中间件放在所有处理响应的中间件(比如UseStaticFiles、UseRouting)的最前面,修正后代码如下:

    app.Use(async (context, next) =>
    {                       
        // 先执行后续所有中间件,等待响应处理完成
        await next();
        // 再修改最终的响应头,避免被覆盖
        context.Response.Headers.Remove("Cache-Control");
        context.Response.Headers.Add("Cache-Control", "private, max-age=3592001");
    });
    
  • 静态资源优先使用StaticFiles内置配置
    如果你需要配置的是css、js、图片这类静态资源的缓存头,更推荐直接在静态文件中间件的配置中设置,不会被其他逻辑覆盖:

    app.UseStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = ctx =>
        {
            ctx.Context.Response.Headers.Remove("Cache-Control");
            ctx.Context.Response.Headers.Append("Cache-Control", "private, max-age=3592001");
        }
    });
    
  • 检查Azure App Service的全局配置

    1. 进入Azure门户对应应用服务的「配置」-「应用程序设置」页,确认没有配置和缓存相关的全局规则
    2. 进入「HTTP响应头」配置页,确认没有添加全局的Cache-Control响应头规则
    3. 如果开启了应用服务内置的CDN、静态资源缓存功能,关闭对应的默认缓存配置
  • 检查项目响应缓存配置
    确认项目中是否启用了UseResponseCaching()响应缓存中间件,如果启用需要同步修改该中间件的缓存规则,避免其覆盖自定义的响应头。


内容的提问来源于stack exchange,提问作者Just code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:07