asp.net 请求标头的大小太长

mitkmikd  于 2023-01-22  发布在  .NET
关注(0)|答案(8)|浏览(223)

我目前正在一个ASP.NETMVC网站上工作,它工作得很好。
但我有一个问题,我不明白在所有...当我启动我的网站上的Visual Studio与Chrome例如没有问题,但当我停止它,并试图启动其他测试与Firefox例如,我的网址正在增长,然后我得到这个错误:
HTTP 400。请求标头的大小太长。
有人能解释一下为什么会发生这种情况吗?是我的代码有问题还是来自IIS Express或其他什么?
先谢了

lawou6xi

lawou6xi1#

您可能可以增加Web服务器允许的请求大小。但是,请查看浏览器发送到服务器的Cookie的数量和大小。清除Cookie并重试,看看是否可以减少应用使用的Cookie的大小和数量。越少越好!移动的浏览器可能会遇到这些错误,因为它们不允许与桌面浏览器相同的大小(?)。
该错误还可能意味着查询字符串变得太大。

zysjyyx4

zysjyyx42#

.NET MVC解决方案在我的情况下,这是我的索赔,是倍增我的会话cookie看起来如下在我的浏览器cookie:

.AspNet.ApplicationCookie
.AspNet.ApplicationCookieC1
.AspNet.ApplicationCookieC2
.AspNet.ApplicationCookieC3
.AspNet.ApplicationCookieC4
.AspNet.ApplicationCookieC5
.AspNet.ApplicationCookieC6
.AspNet.ApplicationCookieC7
__RequestVerificationToken

我只是简单地转到我的mssql管理工作室中的aspNetUserClaims表并清除它,然后清除项目的浏览器cookie。
刷新页面。Kalas!!!完成!!我相信这是因为我从一个数据库连接字符串切换到另一个导致claimsManager重新创建会话并添加到我的cookie。在饱和时,一切都爆炸了。

nnt7mjpx

nnt7mjpx3#

检查MSDN

原因

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

决议

要解决此问题,请选择下列选项之一:
A)减少用户所属的Active Directory组的数量。

B)修改IIS服务器上的MaxFieldLength和MaxRequestBytes注册表设置,以便用户的请求标头不会被认为太长。要确定MaxFieldLength和MaxRequestBytes注册表项的适当设置,请使用以下计算:
1.使用以下文章中介绍的公式计算用户的Kerberos令牌的大小:
用户属于多个组http://support.microsoft.com/kb/327825时Kerberos身份验证问题的新解决方案
1.将IIS服务器上的MaxFieldLength和MaxRequestBytes注册表项的值配置为4/3 * T,其中T是用户的令牌大小(以字节为单位)。HTTP使用base64编码对Kerberos令牌进行编码,因此令牌中每3个字节替换为4个base64编码字节。对注册表所做的更改只有在重新启动HTTP服务后才会生效。此外,您可能必须重新启动任何相关的IIS服务。

nfs0ujit

nfs0ujit4#

试试这个

<system.web>
        <httpRuntime maxRequestLength="2097151" executionTimeout="2097151" />
</system.web>

maxRequestLength的默认大小为4096 KB(4 MB)。
如果浏览器反复请求某个资源,有时候请求头值长度会成倍增长,所以我们可以尝试将请求长度扩展到最大长度,希望这会有用

hgqdbh6s

hgqdbh6s5#

在windows系统中,通常由于http.sys服务中设置的默认头大小限制而发生此错误。此服务在请求转发到应用程序之前充当保护层,以防止它被无效请求淹没。
您可以通过修改windows注册表来覆盖默认的最大标头限制。
请按照以下步骤操作:

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

资源:

7qhs6swi

7qhs6swi6#

在我的例子中,我的本地主机上有许多不同应用程序的cookie,这些cookies都很大。FF会根据主机名进行区分,所以从本地主机清除cookie可以解决这个问题。

qvtsj1bj

qvtsj1bj7#

根据Ifeanyi Chukwu的回答,我尝试了隐私模式(Incognito),效果很好。然后我进入浏览器设置并删除我网站的cookie(localhost)。这就解决了问题。

sy5wg1nm

sy5wg1nm8#

由于您可能已经发现了问题,一个简单的临时解决方案是在调试时切换浏览器。

相关问题