【发布时间】: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