http 400 java,HTTP 400 对 HTTP 请求的错误响应 - Internet Information Services | Microsoft Docs...

HTTP 400 错误 (请求标头过长) HTTP 请求的响应

03/23/2020

本文内容

本文帮助您解决当需要 Kerberos 身份验证的超文本传输协议 (HTTP) 请求从浏览器发送到在 Microsoft Internet Information Services (IIS) 上托管并配置为使用 Kerberos 身份验证的网站时发生的 HTTP 400 错误。

原始产品版本:   Windows Server 2016

原始 KB 编号:   2020943

症状

需要 Kerberos 身份验证的 HTTP 请求从浏览器发送到 IIS 上承载的网站。 网站配置为使用 Kerberos 身份验证。 但是,您不是收到预期的网页,而是收到类似于以下网页的错误消息:

HTTP 400 - 错误请求 (请求标头太长)

此响应可能由包含 Windows Remote Management 和 WinRM (的任何 HTTP) 。

原因

如果用户是多个 Active Directory 用户组的成员,则可能会出现此问题。

对服务器的 HTTP 请求包含标头中的 Kerberos WWW-Authenticate 令牌。 标头大小随用户组数量的增加而增加。 如果 HTTP 标头或数据包大小超过服务器上配置的限制,则服务器可能会拒绝请求并发送一条错误消息作为响应。

解决方法 1:减少 Active Directory 组数

减少用户是其中一个成员的 Active Directory 组的数量。

解决方法 2:设置 MaxFieldLength 和 MaxRequestBytes 注册表项

增加服务器上注册表项的设置,以便用户的请求标头不超过 MaxFieldLength MaxRequestBytes 这些值。 若要确定适当的设置,请使用以下计算:

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

当用户属于多个组时,Kerberos 身份验证出现问题。

将服务器和服务器上的值设置为 4/3 * T 字节,其中 T 是 MaxFieldLength MaxRequestBytes 用户的令牌大小(以字节为单位)。 HTTP 使用 base64 编码对 Kerberos 令牌进行编码。

备注

这会将令牌中每三个字节替换为四个 base64 编码字节。 在重新启动 HTTP 服务之前,对注册表所做的更改不会生效。 此外,您可能必须重新启动任何相关服务,如 IIS 服务。

根据应用程序环境,您还可以将网站配置为使用 Windows NT LAN Manager (NTLM) 而不是 Kerberos 来解决此问题。 某些应用程序环境要求使用 Kerberos 身份验证进行委派。 我们认为 Kerberos 身份验证比 NTLM 更安全。 建议在考虑安全和委派后果之前不要禁用 Kerberos 身份验证。

更多信息

默认情况下,没有 MaxFieldLength 注册表项。 此项指定每个 HTTP 请求标头的最大大小限制。 注册表 MaxRequestBytes 项指定请求行的总大小和标头的上限。 通常,此注册表项与注册表项 MaxRequestBytes 一起配置。 如果 MaxRequestBytes 值小于值 MaxFieldLength ,则 MaxFieldLength 调整该值。 在大型 Active Directory 环境中,如果这两个条目的值未设置为足够高的值,则用户可能会遇到登录失败。

对于 IIS 6.0 及更高版本,注册表项和注册表项 MaxFieldLength MaxRequestBytes 位于以下子项中:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

设置键值,如下表所示:

名称

值类型

数值数据

MaxFieldLength

DWORD

(4/3 * T 字节) + 200

MaxRequestBytes

DWORD

(4/3 * T 字节) + 200

还可以将注册表项设置为其最大值,如下表所示。 在更改注册表设置之前,请考虑所有潜在的安全后果。

名称

值类型

数值数据

MaxFieldLength

DWORD

65536 (12) 或 10000 (十六进制)

MaxRequestBytes

DWORD

16777216 (12 月) 或 1000000 (十六进制)

重要

更改这些注册表项应该被视为非常危险。 这些密钥允许将较大的 HTTP 数据包发送到 IIS。 反过来,这可能会导致Http.sys占用更多内存。 因此,此类更改可能会增加计算机受到恶意攻击的漏洞。

如果设置为其最大值 64 KB,则注册表值应设置为 MaxFieldLength MaxTokenSize 3/4 * 64 = 48 KB。 有关设置详细信息,请参阅当用户属于多个组时 MaxTokenSize Kerberos 身份验证的问题。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值