【问题标题】:Web API maximum header value length?Web API最大标头值长度?
【发布时间】:2014-05-20 08:15:48
【问题描述】:

我在 ASP.Net 中创建了一个 Web API 项目,但在验证工作时遇到了一些问题。

API 期望在每个请求的 Authorization 标头中提交一个令牌。检查是否设置了标头的代码检查

HttpRequestMessage.Headers.Authorization

属性为空。前几次我测试这个,我发现这个属性总是空的,但奇怪的是,如果你检查了 HttpRequestMessage.Headers 枚举,授权头设置正确(如果你做了 HttpRequestMessage.Headers.ToString() ,它也会出现在那里)。

更奇怪的是,我发现如果我删除了令牌中发送的一些属性,我可以让它按预期工作。因此,如果标头值的字符长度太长,就好像没有设置 Authorization 属性。不幸的是,即使手动从令牌中删除一些文本,它也会在摘要检查中继续失败,这是应该的!

我找不到任何提到这一点的文档,所以我想知道是否有其他人遇到过它?我不认为 IIS 的标头太长,因为标头值出现在 HttpRequestMessage.Headers.ToString() 中,所以它正在被接收,但由于某种原因它没有被分配给 Authorization 属性。

不幸的是,我无法重新编写检查此属性的代码(这似乎是简单的解决方案),因为它是 Thinktecture 库的一部分(即不是我们自己编写的)。

【问题讨论】:

  • 你有解决这个问题的办法吗?我面临着完全相同的问题。如果我的标头是Authorization: Basic,那么一切正常,但对于Authorization: Digest,它的行为与您上面描述的相同。
  • 说实话,我们的组织正计划改变我们正在使用的令牌类型,所以我等待着。幸运的是,新令牌比以前的类型短了很多,所以我不再遇到这个问题。虽然很奇怪,但我并没有真正得到它 - 抱歉!

标签: asp.net http http-headers access-token asp.net-web-api


【解决方案1】:

如果您在 GET 上传递参数,您将被限制为 2100 个字符。 RFC spec 在不同的实现中会有所不同。大多数浏览器将您限制为 2083 个字符。 1000 个字符绝对可以逃脱。

Microsoft

Pretty much everybody else

如果您在 POST 上传递参数,您应该有几乎无限的长度。

【讨论】:

  • HTTP 请求是从 .NET 应用程序发出的,所以我不确定浏览器是否会在这里发挥作用。如果我通过 Headers 集合进行枚举,我可以看到令牌的完整值,但由于某种原因,除非令牌更小,否则 Authorization 属性为 null。
  • 浏览器可能不会起作用,但字符数的限制仍然适用。
  • 它也在标头中,而不是 GET 上的参数,所以 URL 长度限制不适用,对吧?
  • 标头也有长度限制。这似乎是可以由服务器配置的东西。 IIS 最多允许 32k 字节。其他人有较低的限制。这将取决于您正在与之交谈的服务器。 How to set IIS' Maximum Header length
  • 我遇到了大约 2kb 的限制。它并没有解释为什么我在调用 request.Headers.ToString() 时可以看到完整的标头,但不能通过 request.Headers.Authorization 看到,是吗?这些语句都来自接收请求的应用程序,而不是发送请求。我认为这与通过浏览器或 IIS 施加的任何限制不同......
猜你喜欢
  • 2021-10-04
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
相关资源
最近更新 更多