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

.NET6 Web App+IIS6环境下STS生成Cookie请求头过长解决方案

解决IIS 6下.NET 6 Web App因Azure AD Ws Fed Cookie头过长导致的400错误

问题描述

使用外部身份提供商Azure AD,无法控制组/角色数量,STS(Ws Fed)生成的Cookie请求头超出限制,报错:

Bad Request - Header Field Too Long
HTTP Error 400. A request header field is too long.

系统环境:.NET 6 Web App + IIS 6

已尝试的操作

  • 在web.config中添加配置:
    <system.web><httpRuntime maxRequestLength="16777210" maxRequestHeadersTotalSize="131068"/></system.web>
    
  • 在web.config中添加安全配置:
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="16777210">
          <headerLimits>
            <add header="Cookie" sizeLimit="131068" />
          </headerLimits>
         </requestLimits>
      </requestFiltering>
    </security>       
    
  • 在注册表路径Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters中定义MaxFieldLength和MaxRequestBytes
  • 添加代码配置:
    builder.Services.Configure<IISServerOptions>(options =>
    {
      options.MaxRequestBodySize = int.MaxValue;
      options.MaxRequestBodyBufferSize = int.MaxValue;
    });
    
  • 已在Kestrel上通过kestrelOptions.Limits.MaxRequestHeadersTotalSize = int.MaxValue解决,但需适配IIS 6环境。

针对IIS 6的解决方案

1. 调整HTTP.sys注册表参数(核心步骤)

IIS 6依赖HTTP.sys处理请求,必须确保以下注册表参数设置足够大:

  • 打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
  • 添加或修改DWORD类型的键值:
    • MaxFieldLength:设置为大于当前Cookie头长度的数值,建议设为65536(64KB),最大值不超过65535
    • MaxRequestBytes:值必须大于MaxFieldLength,建议设为131072(128KB)
  • 修改完成后,执行命令重启HTTP服务:net stop http && net start http,或直接重启服务器

2. 配置IIS 6站点的请求限制

IIS 6的请求筛选需通过IIS管理器或metabase.xml配置:

  • 通过IIS管理器:右键目标站点 → 属性 → 主目录 → 配置 → 选项,将“启用内容长度限制”设置为足够大的值(如16MB即16777216)
  • 通过metabase.xml:找到对应站点的配置条目,添加HeaderLimits属性限制Cookie头大小,示例:
    <IIsWebServer ... HeaderLimits="Cookie:65536" />
    
    修改后需重启IIS服务生效

3. 完善ASP.NET Core集成配置

在web.config中添加ASP.NET Core模块的请求头大小限制:

<system.webServer>
  <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
    <limits maxRequestHeadersTotalSize="65536" />
  </aspNetCore>
</system.webServer>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:15:15