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

IIS 10.0 API接口响应异常添加Pragma、Expires禁用头排查求助

排查思路
  • 检查.NET Framework输出缓存模块的默认配置:仅动态请求(包括API接口)会触发OutputCache模块的默认头写入逻辑,静态资源不会触发,这是Pragma、Expires头最常见的动态请求专属注入来源。可先在站点级web.config的<system.web>节点下验证是否存在缓存配置,或者查看全局.NET Framework配置的缓存默认策略。
  • 核查IIS管道中托管模块的注入行为:优先排查自定义HTTP模块、第三方鉴权/流量管控插件是否只对路由匹配的API请求追加了缓存控制头,可在IIS管理器的「模块」功能中按执行顺序排查所有托管模块的配置。
  • 验证配置继承链是否生效:你当前修改的是.NET Framework 2.0版本的全局web.config,如果你的API站点运行的是.NET Framework 4.x版本,需要对应修改C:\Windows\Microsoft.NET\Framework64\v4.0.30319\CONFIG\web.config中的customHeaders节点,同时还要检查站点根目录、API应用所在子目录的web.config是否存在<clear/>覆盖了上层的remove配置。
  • 检查ASP.NET MVC/Web API的全局过滤器配置:即使业务代码没有显式设置响应头,全局注册的OutputCacheAttribute或者第三方过滤器也会自动为接口响应追加缓存头,可查看Global.asax.cs或者WebApiConfig注册的全局过滤器列表。
可行解决方案
  • 全局禁用输出缓存模块的默认头注入:在站点web.config中添加如下配置,禁用动态请求的默认缓存头生成:
<system.web>
  <outputCache enableOutputCache="false" omitVaryStar="true">
    <providers>
      <clear />
    </providers>
  </outputCache>
  <httpRuntime enableKernelOutputCache="false" />
</system.web>
  • 使用URL重写规则强制出站移除头:针对匹配API路径的请求,强制在IIS出站响应阶段移除指定头,配置示例如下:
<system.webServer>
  <rewrite>
    <outboundRules>
      <rule name="Remove Pragma Header">
        <match serverVariable="RESPONSE_Pragma" pattern=".+" />
        <action type="Rewrite" value="" />
      </rule>
      <rule name="Remove Expires Header">
        <match serverVariable="RESPONSE_Expires" pattern=".+" />
        <action type="Rewrite" value="" />
      </rule>
    </outboundRules>
  </rewrite>
</system.web>
  • 应用程序级事件强制清空头:在Global.asax的Application_EndRequest事件中添加逻辑,直接清空这两个响应头,确保管道最后阶段不会残留:
protected void Application_EndRequest(object sender, EventArgs e)
{
    Response.Headers.Remove("Pragma");
    Response.Headers.Remove("Expires");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:36:00