【问题标题】:Can we increase http header size beyond 64kb in Windows我们可以在 Windows 中将 http 标头大小增加到 64kb 以上吗
【发布时间】:2021-02-10 12:45:05
【问题描述】:

我有一种情况,特定用户的 HTTP 授权请求标头 大小超过 64kb(大约 90kb)。 size大的原因是header中包含了bearer token,并且发起http请求的用户有很多的Claim。

问题在于对于这个特定用户,网络服务器总是返回一个错误声明:

"HTTP Error 400. The size of the request headers is too long".

Web 应用程序使用Microsoft owin 自托管在控制台应用程序中,因此不涉及 iis。

在调查问题时,我遇到了following document。它表示 MaxFieldLength 的最大值为 64kb,表示 http.sys 处理的最大标头长度,我的服务器设置为最大值,即 65,536。

出于好奇,我尝试将值进一步增加到 131,072,但正如预期的那样,它并没有解决问题。

那么还有其他方法可以增加标头最大长度吗?

【问题讨论】:

  • 这能回答你的问题吗? Maximum on http header values?
  • 恐怕没有。上述问题中的答案从 http 规范的角度讨论了对标头最大大小没有限制。但是在我的情况下,我在 Windows 服务器上达到了 64kb 的最大值,并在标头大小超出该值时寻找解决方案
  • 64k 是 http.sys 记录的最大值,因此您将不得不使用不同的服务器。一个快速的谷歌搜索似乎表明每个主要的 http 服务器都有一个大约 8k 左右的“小”默认值。 90kb 非常大,所以你将不得不使用一个没有上限的服务器;不妨试试 Apache。
  • 任何异常日志可以显示它是从哪里引发的?
  • 似乎是时候重新考虑您的协议了。也许您可以在请求正文而不是标头中将声明作为 JSON 发送。它甚至更容易操作。

标签: asp.net windows http owin http.sys


【解决方案1】:

我遇到了这个问题并通过增加注册表中设置的限制来解决它。 (打开命令并输入 regedit)。

您修改MaxFieldLength 是对的,但是您还必须修改MaxRequestBytes,正如documentation 中所述:

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

默认情况下,没有 MaxFieldLength 注册表项。此条目指定每个 HTTP 请求标头的最大大小限制。 MaxRequestBytes 注册表项指定请求行和标头的总大小的上限。通常,此注册表项与 MaxRequestBytes 注册表项一起配置。

如果 MaxRequestBytes 值低于 MaxFieldLength 值, 调整 MaxFieldLength 值。在大型活动目录中 环境中,用户可能会遇到登录失败,如果值 这两个条目都没有设置为足够高的值。

您必须在以下位置添加/修改这些条目:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters 

对于 IIS 6.0 及更高版本,MaxFieldLength 和 MaxRequestBytes 注册表项位于以下子项中: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

【讨论】:

  • 我们已经尝试设置参数。问题是令牌长度为 90KB,超出了 MaxFieldLength 的最大允许值 64KB。顺便说一句,MaxRequestBytes 值设置为 16MB,远高于 MaxFieldLength。
【解决方案2】:

在意识到 http.sys 服务器无法解决将大小限制增加到超过规定的最大值时,已实施以下解决方案来克服手头的问题。

免责声明:与其说是正确的解决方案,不如说是一种变通方法。

创建现有控制器的新版本(v2,因为这些是重大更改)并进行以下更改:

  • 将每个 GET 请求转换为 POST 请求,并将任何适用的查询参数作为键值对传递到请求正文中。
  • 在每个请求正文中添加一个附加键"access_token",其值为bearer token,用于处理授权。忽略未受保护的端点。
  • 更新文档并通过清晰的示例通知所有最终用户所做的更改。
  • "Deprecated"标签装饰旧版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    相关资源
    最近更新 更多