【问题标题】:MaxFieldLength and MaxRequestBytes setting for a 400 Bad Request400 错误请求的 MaxFieldLength 和 MaxRequestBytes 设置
【发布时间】:2020-06-05 07:38:48
【问题描述】:

我们有一个 IIS 网站为极少数用户返回 400 Bad Request。我们正在使用 Windows 身份验证 经过研究,我在服务器上的 HTTP.err 日志中发现了以下信息 2020-06-05 06:44:05 10.213.144.138 53021 10.11.210.147 80 HTTP/1.1 GET / - 400 - RequestLength - 我将MaxFieldLength & MaxRequestBytes 设置为这里建议的最大值 https://docs.microsoft.com/en-us/exchange/troubleshoot/http-proxy/400-bad-request

用户仍然收到 400 Bad request 错误。 该用户属于大约 200 个 AD 组,并且不想删除其中任何一个。

【问题讨论】:

  • 您的问题解决了吗?如果您的问题得到解决,那么我请求您将有用的建议标记为答案。这将帮助面临同样问题的其他人。

标签: iis iis-7.5


【解决方案1】:

清除您的 cookie 并重试,看看是否可以减少您的应用使用的 cookie 的大小和数量。

在设置注册表项值时,请确保考虑以下几点:

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

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

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

https://support.microsoft.com/en-us/help/2020943/http-400-bad-request-request-header-too-long-response-to-http-request

注意:请确保在进行更改后重新启动机器。

您也可以尝试在您的网站 web.config 文件中添加以下代码:

 <configuration>
        <system.webServer>
            <security>
              <requestFiltering>
                <requestLimits maxAllowedContentLength="500000000" />
              </requestFiltering>
            </security>
        <system.webServer>
     <system.web>
        <httpRuntime maxRequestLength="500000000"  executionTimeout="120" />
    </system.web>
    </configuration>    

如果您仍然遇到同样的问题,请尝试使用 fiddler 或任何其他工具来捕获网络流量并正确分析请求和响应标头。

【讨论】:

  • 抱歉耽搁了。出去了几天。我们在我们的应用程序中使用 Windows 身份验证。我不认为需要 Kerberos 配置。我可能错了。你仍然认为我不会执行 Kerberos 步骤吗?我更改了最大字段长度和最大请求​​长度的注册表值。我是否也应该在网络配置级别进行。无论如何我都会尝试。 Fiddler 也显示 400 Bad request。错误请求太长。我不知道还有什么可以帮助的。
  • @jalpa:我们正在使用表单身份验证,在这种情况下如何计算令牌大小?
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 2017-12-31
  • 2014-10-11
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多