HTTP 错误 400。请求标头的大小在 ASP.NET MVC 应用程序中过长
Posted
技术标签:
【中文标题】HTTP 错误 400。请求标头的大小在 ASP.NET MVC 应用程序中过长【英文标题】:HTTP Error 400. The size of the request headers is too long in ASP.NET MVC-application 【发布时间】:2020-05-23 10:04:39 【问题描述】:我们创建了一个使用 Windows 身份验证的 ASP.NET MVC 应用程序。我们现在遇到的问题是,我们有一些用户在访问该站点时收到以下错误消息:
HTTP 错误 400。请求标头的大小太长。
这似乎是因为用户在过多的 Active Directory 组中。
我已经做了以下事情:
我在运行 Web 应用程序的服务器上添加了以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\MaxFieldLength ==> 65536
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\MaxRequestBytes ==> 16777216
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lsa\Parameters\MaxTokenSize ==> 65535
我还在访问 Web 应用程序的客户端计算机上设置了以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lsa\Parameters\MaxTokenSize ==> 65535
然后我重新启动了所有计算机并尝试再次访问 Web 应用程序。我仍然收到上述错误消息。
有人知道我能做什么吗? 我该如何进一步调试和分析这个问题?
【问题讨论】:
首先,你有没有监控400的响应服务器是http api/2.0还是IIS?它会告诉我们应该关注哪一层。如果响应服务器是http api,那么你应该关注registry。否则,您应该专注于 IIS 配置并承诺应用程序池已被回收。 响应来自http api/2.0 如果是这样,应该从 http.sys 而不是 IIS 返回错误。修改注册表项应该可以工作,这很奇怪。如果你想进一步挖掘。使用docs.microsoft.com/zh-cn/archive/blogs/wndp/…捕获etl并分析http.sys日志 此外,您是否监控过您的请求标头是否仍然超过配置的大小。 【参考方案1】:您可以根据需要在 web.config 中设置以下请求长度限制来再次检查它吗?
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>
</configuration>
和
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
【讨论】:
谢谢。我进行了这些更改并重新启动了服务器。不幸的是,我仍然收到相同的错误消息。 您在 web.config 中提到的尺寸是多少?如答案中所述或根据您的需要? 我目前使用 2097151 作为 maxRequestLength,使用 2147483648 作为 maxAllowedContentLength,但我也使用了示例中的值。【参考方案2】:我通过配置编辑器在 IIS 根级别手动更改了上述设置,它在一种情况下对我有用。
我必须这样做,因为直到 application\ virtual 直接请求事件才到达(我在 IIS 日志中检查过)
【讨论】:
以上是关于HTTP 错误 400。请求标头的大小在 ASP.NET MVC 应用程序中过长的主要内容,如果未能解决你的问题,请参考以下文章
错误请求 - 请求太长HTTP错误400.请求标头的大小太长
Jetty 在格式错误的 HTTP POST 标头上返回“HTTP/1.1 400 Bad Request”。这是预期的吗?
WCF ProtocolException:错误请求 400(与 http 消息大小有关)