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

IIS部署.NET Core应用出现400 Bad Request Header too long错误如何解决

解决方案

1. 修正web.config完整配置

IIS托管.NET Core应用时,除了常规的请求限制,还要额外配置ASP.NET Core模块(ANCM)的头大小限制,完整配置示例如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <!-- 配置IIS运行时允许更大的请求头 -->
    <serverRuntime maxRequestHeaders="16384" enabled="true" />
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824">
          <!-- 单独配置Authorization头的最大允许大小,单位字节 -->
          <headerLimits>
            <add header="Authorization" sizeLimit="1048576" />
          </headerLimits>
        </requestLimits>
      </requestFiltering>
    </security>
    <!-- 配置ANCM的最大请求头总大小为1MB,单位字节 -->
    <aspNetCore processPath="dotnet" arguments=".\你的应用名称.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
      <handlerSettings>
        <handlerSetting name="maxRequestHeadersSize" value="1048576" />
      </handlerSettings>
    </aspNetCore>
  </system.webServer>
</configuration>

注意:如果添加节点后站点报500配置错误,打开IIS管理器进入对应站点,找到「功能委派」,将「Server Runtime」的权限设置为「读/写」即可。

2. 确保注册表配置生效

你修改的HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/HTTP/Parameters路径下的MaxFieldLength(建议设为65534,单位字节)和MaxRequestBytes(建议设为16777216,单位字节)参数,修改后必须重启HTTP服务才会生效,操作步骤:

  • 打开管理员权限的命令提示符
  • 执行 net stop http /y 停止HTTP服务,依赖的IIS相关服务会同步停止
  • 执行 net start w3svc 重启IIS服务
  • 条件允许的话重启服务器可以确保配置完全加载

3. 托管模式适配

  • 如果用的是进程内托管模式,完成前两步配置即可生效,不需要额外修改Kestrel配置
  • 如果用的是进程外托管模式,需要保留你之前写的Kestrel头大小限制代码,两边的限制都要放开才会生效

4. 根源优化方案

正常情况下授权令牌不会随着API调用次数增加而持续膨胀,出现这个问题大概率是授权逻辑每次鉴权都往Claims里追加内容没有清理,或者把大量非必要信息存到了JWT令牌中,可以从根源优化避免后续再出现同类问题:

  • 梳理授权逻辑,仅在令牌中保留必要的用户标识信息,不要冗余存储
  • 大权限场景下可以改用参考令牌,令牌仅存储唯一标识,用户权限信息存在服务端缓存/数据库中,鉴权时再读取,彻底避免请求头过大问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:54:03