Azure API 响应中缺少速率限制标头

Posted

技术标签:

【中文标题】Azure API 响应中缺少速率限制标头【英文标题】:Missing rate limiting headers in Azure API responses 【发布时间】:2021-12-09 15:44:41 【问题描述】:

我的应用程序受到 Azure 管理 API 的限制,如果我可以访问速率限制标头,那么调查哪些请求导致问题会容易得多。我以为它们是默认返回的,但它们不是,至少对我来说不是。我已按照this article 中列出的步骤进行操作,但没有返回任何速率限制标头。我什至将 Azure CLI 升级到了最新版本,但也没有用。

所以问题是我是否需要在 Azure 门户中启用某些东西来检索此类信息,或者可能是其他东西。无论如何,我会非常感谢任何帮助,因为我感到有点困惑。

这是一个示例响应:

GET https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourcegroups?api-version=2021-04-01

HTTP/2 200 
cache-control: no-cache
pragma: no-cache
content-type: application/json; charset=utf-8
expires: -1
x-ms-request-id: d093ff31-9b06-41dd-9c3a-6e7b7275e02
x-ms-correlation-request-id: d093ff31-9b06-41dd-9c3a-6e7b7275e023
x-ms-routing-request-id: EASTUS2:20211024T140342Z:d093ff31-9b06-41dd-9c3a-6e7b7275e023
strict-transport-security: max-age=31536000; includeSubDomains
x-content-type-options: nosniff
date: Sun, 24 Oct 2021 14:03:42 GMT
content-length: 289

<JSON_DATA>

【问题讨论】:

您期望但未收到哪些特定标头?有些标头只有在超出限制后才会返回。您在 APIM 中配置的限速策略是什么? @AnandSowmithiran 如果我理解正确,APIM 是关于用户定义的 API,但在我的问题中,我指的是 Azure 提供的 Azure 管理 API,用于与 VM、卷、网络接口等进行交互。情况下我无法配置任何速率限制策略,因为它们是由 Azure 定义为列出的here @AnandSowmithiran 我在帖子中添加了一个示例响应。如您所见,我不包含任何速率限制标头,但根据我发送的文章,它应该包含。 在文章中,它提到使用 Powershell 的 Debug 参数和 Azure CLI 的详细参数来获取这些速率限制标头。您可以尝试一下吗,例如尝试使用此 Powershell 脚本github.com/microsoft/csa-misc-utils/blob/master/… 我不确定,但是文档不能保证这些标头在正常负载下,只有当限制“接近”超过这些标头时,才可能返回这些标头。这些限制对于不同的 Az 资源也不同,并且在大多数情况下是“每个用户”。你确定你有很多 429 错误代码,甚至在那个响应头丢失期间?没有任何文档谈到启用 Az 门户中的任何标志或设置来接收这些限制标头。所以,我猜你可以提出 Microsoft 支持票。 【参考方案1】:

谢谢Anand Sowmithiran。发布您的建议作为帮助其他社区成员的答案。

在文章中,它提到了使用 Powershell 的 Debug 参数和 Azure CLI 的详细参数来获取这些速率限制标头。你可以尝试使用这个Powershell脚本https://github.com/microsoft/csa-misc-utils/blob/master/psh-GetArmLimitsViaAPI/GetArmLimits.ps1

文档不保证这些标头可以正常加载,只有当“接近”超出限制时,才可能返回这些标头。这些限制对于不同的 Az 资源也不同,并且在大多数情况下是“每个用户”。你确定你有很多 429 错误代码,甚至在那个响应头丢失期间?没有任何文档提及启用 Az 门户中的任何标志或设置来接收这些限制标头

注意

由于节流架构的分布式特性,速率限制永远不会完全准确。已配置请求数与实际允许请求数之间的差异因请求量和速率、后端延迟和其他因素而异。

您可以参考Limit call rate by subscription和Limit call rate by key

您可以在 GitHub 上打开一个问题:Azure/api-management-developer-portal

您可以通过raise support ticket、Twitter @AzureSupport 向 Microsoft 举报,也可以在 Microsoft Q&A 上提出相同的问题

【讨论】:

以上是关于Azure API 响应中缺少速率限制标头的主要内容,如果未能解决你的问题,请参考以下文章

Azure Fluent API 创建 SQL Server 时出错 - 缺少 x-ms-request-id 标头

随机发生,预检响应缺少允许标头

*** API 响应中缺少 CORS 标头“Access-Control-Allow-Origin”[重复]

transformResponse 标头参数 ($resource) 中缺少自定义响应的标头

Nginx后缺少响应标头[关闭]

API 调用缺少文件传输的标头信息