"HTTP 400-错误的请求 (请求标题太长)"错误在 Internet Information Services (IIS)

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 2020943
症状

尝试浏览到网站承载上 Internet Information Services (IIS) 6.0 或更高版本使用 Internet Explorer 6.0 或更高版本的域用户。 该网站配置为使用 Kerberos 身份验证。 而不是接收预期的 web 页时,用户会看到与以下类似的错误消息:

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

原因

许多活动目录用户组的成员用户时,可能发生此问题。当用户是大量 active directory 的成员分组 Kerberos 身份验证令牌的用户增加大小。用户发送到 IIS 服务器的 HTTP 请求包含在 WWW 身份验证标题中,Kerberos 令牌和组数上升随着标头大小。 如果超出限制在 IIS 中配置的 HTTP 标头或数据包大小的增加,IIS 可能会拒绝请求并作为响应发送此错误。

解决方案

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

A) 减少用户所在的 Active Directory 组的数目。

OR

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

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

      新的解决办法问题的 Kerberos 身份验证,当用户属于多个组
      http://support.microsoft.com/kb/327825


    2. 配置值与 IIS 服务器上的 MaxFieldLength 和 MaxRequestBytes 注册表项4/3 * T,其中T是用户的令牌的大小,以字节为单位。HTTP 对 Kerberos 令牌使用 base64 编码机制进行编码,因此具有 4 base64 令牌中每隔 3 个字节替换经过编码的字节。 重新启动 HTTP 服务,对注册表进行的更改才会生效。此外,您可能需要重新启动所有相关的 IIS 服务。

注意: 根据您的应用程序环境,您也可以考虑配置 web 站点,而不是 Kerberos 使用 NTLM 来变通解决此问题。 某些应用程序环境需要 Kerberos 委派用途,Kerberos 是比 NTLM,更安全,因此建议您不要在考虑安全和委派这样做的后果之前禁用 Kerberos。


更多信息

默认情况下,将 MaxFieldLength 注册表项不存在。此注册表项中指定每个 HTTP 请求标头的最大大小的限制。MaxRequestBytes 注册表项指定的请求行和标题的总大小的上限。通常情况下,将 MaxRequestBytes 注册表项和配置此注册表项。如果 MaxRequestBytes 的值低于 MaxFieldLength 值,调整 MaxFieldLength 值。 大型活动目录环境中,如果为两个这些项的值未设置为足够高的值,用户可能遇到登录失败。

对于 Internet Information Services (IIS) 6.0 及更高版本,MaxFieldLength 和 MaxRequestBytes 注册表项位于HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters。 对其进行配置,如下表所示:

名称

值类型

数值数据

MaxFieldLength

双字节

(4/3 * T 字节) + 200

MaxRequestBytes

双字节

(4/3 * T 字节) + 200

或者,您可以为其最大值,如下所示设置注册表项。管理员应考虑所有潜在的安全后果,如果他对注册表设置进行任何更改:

 

名称

值类型

数值数据

MaxFieldLength

双字节

65534

MaxRequestBytes

双字节

16777216

重要信息: 更改这些注册表项可被视为非常危险。使用这些键,较大的 HTTP 数据包要发送到 IIS,这反过来又可能导致 Http.sys 占用更多内存,并且可能会增加易受恶意攻击的漏洞。

注意:如果 MaxFieldLength 配置为 64 KB,其最大值,然后将 MaxTokenSize 注册表值应设置为 3/4 * 64 = 48 KB。 MaxTokenSize 设置的详细信息,请参阅 Microsoft 知识库文章 KB327825 下面列出。

有关本文中所讨论主题的详细信息可以在以下位置找到:

Http.sys 注册表设置 IIS。
http://support.microsoft.com/kb/820129/en-us

日志记录 HTTP API 中的错误
http://support.microsoft.com/?id=820729

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

Outlook Web Access 用户尝试访问在 Exchange Server 2003年邮箱时出现错误消息
http://support.microsoft.com/kb/920862

属性

文章 ID:2020943 - 上次审阅时间:10/26/2015 17:28:00 - 修订版本: 1.0

  • kbmt KB2020943 KbMtzh
反馈