我目前正在开发一个ASP.NET MVC网站,它运行正常。
但是我有一个我根本不理解的问题...当我在Chrome上使用Chrome启动我的网站时没有问题,但当我停止它并尝试用Firefox启动其他测试时,我的网址正在增长,然后我收到此错误:
HTTP 400.请求标头的大小太长。
有人能解释一下为什么会这样吗?它是我的代码还是来自IIS express或其他任何东西?
提前致谢
答案 0 :(得分:8)
您可以增加网络服务器允许的请求数量。但是,请查看浏览器发送到服务器的cookie的数量和大小。清除您的Cookie并重试,看看您是否可以减少应用使用的Cookie的大小和数量。越少越好!移动浏览器可能会出现这些错误,因为它们不允许与桌面浏览器相同的大小(?)。
错误也可能意味着查询字符串变得太大。
答案 1 :(得分:5)
试试这个
<system.web>
<httpRuntime maxRequestLength="2097151" executionTimeout="2097151" />
</system.web>
maxRequestLength默认大小为4096 KB(4 MB)。
如果浏览器反复请求某个资源,有时请求标头值长度增加次数,因此我们可能会尝试将请求长度扩展到最大长度。 我希望这可能有用
答案 2 :(得分:2)
检查MSDN:
<强>原因强>
当用户是许多Active的成员时,可能会发生此问题 目录用户组。当用户是大量的成员时 Active Directory为用户分组Kerberos身份验证令牌 增加规模。用户发送到IIS的HTTP请求 server包含WWW-Authenticate标头中的Kerberos令牌,以及 标题大小随着组数的增加而增加。如果 HTTP标头或数据包大小超过了配置的限制 IIS,IIS可能会拒绝该请求并将此错误作为响应发送。
解决强>
要解决此问题,请选择以下选项之一:
A)减少用户所在的Active Directory组的数量 成员。
OR
B)修改MaxFieldLength和MaxRequestBytes注册表设置 在IIS服务器上,因此不会考虑用户的请求标头 长。确定MaxFieldLength的适当设置 和MaxRequestBytes注册表项,使用以下 计算:
使用以下文章中描述的公式计算用户的Kerberos令牌的大小:
当用户属于多个组时,Kerberos身份验证问题的新解决方案 http://support.microsoft.com/kb/327825
- 醇>
在IIS服务器上配置值为4/3 * T的MaxFieldLength和MaxRequestBytes注册表项,其中T是用户的令牌 大小,以字节为单位。 HTTP使用base64编码对Kerberos令牌进行编码 因此用4 base64替换令牌中的每3个字节 编码字节。对注册表所做的更改将不会发生 直到重新启动HTTP服务为止。另外,你可能有 重新启动任何相关的IIS服务。
答案 3 :(得分:1)
就我而言,我的本地主机上提供了来自多个不同应用程序的Cookie,其中包含大型Cookie。 FF按主机名区分,因此从本地主机清除cookie会解决该问题。
答案 4 :(得分:0)
.NET MVC解决方案 就我而言,正是我的主张使会话cookie倍增,使其在浏览器cookie中看起来如下所示:
.AspNet.ApplicationCookie
.AspNet.ApplicationCookieC1
.AspNet.ApplicationCookieC2
.AspNet.ApplicationCookieC3
.AspNet.ApplicationCookieC4
.AspNet.ApplicationCookieC5
.AspNet.ApplicationCookieC6
.AspNet.ApplicationCookieC7
__RequestVerificationToken
我只是去了mssql管理工作室中的aspNetUserClaims表并清除了它。然后清除该项目的浏览器cookie。
刷新页面。卡拉斯!做完了! 我相信这是因为我从一个数据库连接字符串切换到另一个数据库,这导致ClaimsManager重新创建会话并添加到我的cookie。饱和时,一切都会爆炸。