iis HTTP 400,请求标头的大小太长

axkjgtzd  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(660)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Request Too Long</h2>
<hr><p>HTTP Error 400. The size of the request headers is too long.</p>
</BODY></HTML>

我有一个c# web API沿着angularjs webapp,在部署服务器上表现得相当奇怪。
它会随机抛出400 Bad Request错误,用于一秒钟前工作的相同Web API调用。最初删除cookie和清除缓存可以修复这些错误,但从过去几天开始,即使这样也不起作用。
我检查了我的标题大小,它是在限制范围内。我有4个cookie,每个几乎4 MB,所以这不应该是一个问题。
此外,这只发生在QA环境(负载平衡有2个盒子)上,而不会发生在任何其他环境上。
有什么建议吗?
编辑:这是浏览器的响应Bad Request - Request Too Long HTTP Error 400。请求标头的大小太长。

t5fffqht

t5fffqht1#

这个问题是大饼干大小造成太多的索赔,我是存储在它。通过减少不需要的索赔(自定义索赔)的数量来解决这个问题,现在它工作得很好。
将来需要找出其他方法来传递用户的索赔,如果应用程序确实有那么多索赔。

qv7cva1a

qv7cva1a2#

我们也遇到了类似的问题,由于我们的SSO会通过每个用户所在的AD组,而且我们的许多用户都在大量的组中,因此无法减少索赔的数量。
我在StackOverflow中找到了适合我的答案:
检查MSDN
原因
当用户是多个Active Directory用户组的成员时,可能会出现此问题。当用户是大量active directory组的成员时,用户的Kerberos身份验证令牌的大小会增加。用户发送到IIS服务器的HTTP请求在WWW-Authenticate标头中包含Kerberos令牌,并且标头大小随着组数的增加而增加。如果HTTP标头或数据包大小超过IIS中配置的限制,IIS可能会拒绝请求并将此错误作为响应发送。
决议
要解决此问题,请选择以下选项之一:
A)减少用户所属的Active Directory组的数量。

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

相关问题