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

托管于IIS并通过ADFS授权的ASP.NET Core应用报请求头过长错误

ASP.NET Core部署IIS后ADFS授权触发HTTP 400请求头过长问题的排查思路

问题描述

我有一个托管在IIS上、通过ADFS服务器实现授权策略的ASP.NET Core应用。以自托管(Kestrel)方式运行时一切正常,但部署到IIS后就会出现“HTTP Error 400. 请求头字段过长”的错误。

除了我已尝试的方案外,还有其他解决思路吗?以下是来自ADFS的应用Cookie截图,它的体积不算很大,我不清楚为何IIS无法接受。
应用Cookie截图

我已搜索并尝试过以下方案,但均无效:

  • 将MaxFieldLength和MaxRequestBytes设置为最大值
  • 在web.config中增大maxRequestLength的值

其他排查与解决思路

1. 检查IIS请求筛选模块的头大小限制

IIS的请求筛选模块可能单独限制请求头大小,需单独配置:

  • 打开站点的「请求筛选」功能
  • 切换到「HTTP头」标签,点击「编辑功能设置」
  • 调高「最大请求头大小(字节)」的值,例如设置为65536或更高

2. 显式配置Kestrel的请求头限制

部署在IIS上的ASP.NET Core仍依赖Kestrel作为内部服务器,需在Program.cs中手动设置头大小:

builder.WebHost.ConfigureKestrel(options =>
{
    options.Limits.MaxRequestHeadersTotalSize = 65536; // 根据实际情况调整数值
});

3. 精简ADFS返回的Claims内容

Cookie体积看似不大,但ADFS颁发的Claims可能包含冗余或嵌套数据,累计导致请求头超限:

  • 查看ADFS为该应用配置的Claims清单,移除不必要的字段
  • 对过长的Claims内容进行压缩或简化

4. 排查URL重写规则的影响

如果站点配置了URL重写规则,部分规则可能会重复添加或篡改请求头,间接增大体积:

  • 临时禁用所有URL重写规则,验证错误是否消失
  • 检查规则中是否存在修改请求头的逻辑,移除不必要的头字段操作

5. 清理应用层冗余Cookie

应用在认证后可能添加了额外Cookie,导致总Cookie体积超出IIS限制:

  • 用浏览器开发者工具查看请求中的所有Cookie,计算总大小
  • 清理应用内不必要的Cookie,或改用会话存储替代部分Cookie内容

6. 确保IIS配置生效

修改注册表或web.config后,必须重启IIS使配置生效:

  • 执行命令行指令 iisreset 重启IIS服务
  • 手动回收站点对应的应用程序池

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

相关产品推荐
方舟 Agent Plan

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

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