如何在Azure IIS请求中增加HTTP标头值的大小限制?

时间:2017-03-17 16:38:24

标签: c# asp.net http azure iis

令牌在GET请求中的Authorization标头中传递,如下所示:

Authorization: Bearer <token here>

使用试验和错误我发现标头值限制必须在 2048 附近,因为带有小于该标记的令牌的请求会传递到我的ASP.NET应用程序而不进行任何更改,并且具有较大标记的请求具有授权标题已删除,在我的应用中触发了401。

应用程序已发布到Azure。无论请求是GET还是POST,似乎都无关紧要。

限制看起来类似于querystring limit,因此我增加了允许的查询字符串,但它没有帮助。

IIS版本:8.0(来自响应标头)

1 个答案:

答案 0 :(得分:1)

默认情况下,标头长度限制为65536,它在HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ HTTP \ Parameters注册表中设置。我在本地计算机和Azure Web App上都进行了测试。以下是我测试的代码。

在服务器端,我使用

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return Content(Request.Headers["Authorization"]);
    }
}

在客户端,我使用

static async void SendRequest()
{
    HttpClient client = new HttpClient();
    string token = "";
    for (int i = 0; i < 2050; i++)
    {
        token = token + "0";
    }
    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
    HttpResponseMessage message = await client.GetAsync("http://xxx.azurewebsites.net/");
    string content = await message.Content.ReadAsStringAsync();
    Console.WriteLine(content);
}

我可以返回授权参数。

enter image description here

  

使用试错法我发现标题值限制必须在2048左右

另一种修改限制的方法是headerLimits配置部分。我们可以使用此配置部分为特定标头添加长度限制。

如果我将以下配置添加到web.config。我的客户端的请求被阻止,我收到了以下错误。

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits>
        <headerLimits >
          <add header="Authorization" sizeLimit="2048" />
        </headerLimits>
      </requestLimits>
    </requestFiltering>
  </security>
</system.webServer>

enter image description here

如果我增加sizeLimit以满足请求Authorization标头的长度,例如2058.请求将被执行OK。

因此,请检查您是否修改了web.config文件中的headerLimits配置部分。如果是,如果此标头的长度大于限制值,它将阻止您的请求。要解决它,我们可以增加sizeLimit的值来修改Authorization标头的限制。