托管于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无法接受。
我已搜索并尝试过以下方案,但均无效:
- 将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
相关产品推荐
相关产品推荐

