请求标头的大小太长

MrP*_*el6 11 asp.net

我目前正在开发一个ASP.NET MVC网站,它工作正常.

但是,我有我不明白,在所有...当我启动我的网站上的Visual Studio中的Chrome例如没有问题的问题,但是当我停下来,试图与Firefox推出的其他测试,例如,我的网址正在增长,然后我得到这个错误:

HTTP 400.请求标头的大小太长.

有人能解释我为什么会这样吗?它是我的代码的东西,还是来自IIS express或其他任何东西?

提前致谢

ced*_*lof 9

您可以增加Web服务器允许的请求大小.但是,请查看浏览器发送到服务器的cookie的数量和大小.清除您的Cookie并重试,看看您是否可以减少应用使用的Cookie的大小和数量.越少越好!移动浏览器可能会出现这些错误,因为它们不允许与桌面浏览器相同的大小(?).

该错误还可能意味着查询字符串变得太大.


cha*_*ier 7

在 Windows 系统中,通常会由于 http.sys 服务中设置的默认标头大小限制而发生此错误。该服务在请求转发到应用程序之前充当保护层,以防止其被无效请求淹没。

您可以通过修改 Windows 注册表来覆盖默认的最大标头限制。

按照步骤 :

  • 运行注册表
  • 从地址栏转到地址 :Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters或手动向下钻取。
  • 右键单击“参数”>“新建”>“DWORD”
  • 将新条目重命名为 MaxFieldLength
  • 右键单击新创建的 MaxFieldLength,修改它并将值设置为所需的最大单个标头大小(以字节为单位),确保基数设置为十进制。
  • 对 MaxRequestBytes 执行相同的操作。使其足够高以匹配 MaxFieldLength 中设置的值。
  • 以管理员身份打开命令提示符
  • 输入命令“net stop http”(确保 Visual Studio 或其他干扰程序已关闭)
  • 输入命令“net start http”

资源:

  • 是的,如果不存在则需要创建 (2认同)

Ife*_*kwu 6

我的 .NET MVC 解决方案在我的情况下,我声称将我的会话 cookie 乘以在我的浏览器 cookie 中如下所示:

.AspNet.ApplicationCookie
.AspNet.ApplicationCookieC1
.AspNet.ApplicationCookieC2
.AspNet.ApplicationCookieC3
.AspNet.ApplicationCookieC4
.AspNet.ApplicationCookieC5
.AspNet.ApplicationCookieC6
.AspNet.ApplicationCookieC7
__RequestVerificationToken
Run Code Online (Sandbox Code Playgroud)

我只是去我的 mssql 管理工作室中的 aspNetUserClaims 表并清除它。然后清除项目的浏览器cookie。

刷新了页面。卡拉斯!!!完毕!!我相信这是因为我从一个数据库连接字符串切换到另一个数据库连接字符串,这导致 claimManager 重新创建会话并添加到我的 cookie。在饱和时,一切都爆炸了。


Rah*_*thi 5

检查MSDN

原因

当用户是许多Active Directory用户组的成员时,可能会出现此问题。当用户是大量活动目录组的成员时,该用户的Kerberos身份验证令牌的大小会增加。用户发送到IIS服务器的HTTP请求在WWW-Authenticate标头中包含Kerberos令牌,并且标头大小随着组数的增加而增加。如果HTTP标头或数据包大小超过了IIS中配置的限制,则IIS可能会拒绝该请求并将此错误作为响应发送。

解析度

要变通解决此问题,请选择以下选项之一:

A)减少用户所属的Active Directory组的数量。

要么

B)修改IIS服务器上的MaxFieldLength和MaxRequestBytes注册表设置,以使用户的请求标头不被认为太长。若要确定MaxFieldLength和MaxRequestBytes注册表项的适当设置,请使用以下计算:

  1. 使用以下文章中描述的公式计算用户的Kerberos令牌的大小:

    用户属于多个组时Kerberos身份验证问题的新解决方案 http://support.microsoft.com/kb/327825

  2. 在IIS服务器上将MaxFieldLength和MaxRequestBytes注册表项配置为值4/3 * T,其中T是用户的令牌大小,以字节为单位。HTTP使用base64编码对Kerberos令牌进行编码,因此将令牌中的每3个字节替换为4个base64编码的字节。在重新启动HTTP服务之前,对注册表所做的更改将不会生效。此外,您可能必须重新启动任何相关的IIS服务。

  • 这是此错误的一个非常具体的原因和解决方法,即_“当用户是许多Active Directory用户组的成员时,可能会出现此问题”。OP尚未确认是这种情况。 (4认同)
  • 尽管这是否是OP的特定实例的问题,但它是我的实例的问题,因此非常有帮助。谢谢。 (2认同)

小智 5

试试这个

<system.web>
        <httpRuntime maxRequestLength="2097151" executionTimeout="2097151" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

所述的maxRequestLength默认大小为4096 KB(4 MB).

如果浏览器反复请求某个资源,有时请求标头值长度增加次数,因此我们可能会尝试将请求长度扩展到最大长度.我希望这可能有用

  • maxRequestLength 默认值为 4 MB - 对于此类错误的限制非常大。 (2认同)