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.请求标头的大小太长

asp.net http 400 错误的请求怎么解决

Jetty 在格式错误的 HTTP POST 标头上返回“HTTP/1.1 400 Bad Request”。这是预期的吗?

WCF ProtocolException:错误请求 400(与 http 消息大小有关)

Python 请求 POST DATA 错误 400 标头名称无效

当内容类型和内容编码标头一起发送时,表达js拒绝发布请求(400错误请求)