【问题标题】:What should User-Agent be set to when using Microsoft Graph API?使用 Microsoft Graph API 时应将 User-Agent 设置为什么?
【发布时间】:2020-02-12 18:34:19
【问题描述】:

我目前正在开发一个使用 Microsoft Graph API 的 .NET SDK 发出请求的应用程序。专门用于检索有关用户及其 OneDrive 的信息。

Microsoft 通过返回 HTTP 429 状态代码来限制 API 请求,我已经使用 Retry-After 标头实现了退避。然而,我注意到,我似乎只在少数请求后受到限制。

我也一直在使用Microsoft Graph Explorer 来测试我的一些 API 调用,并注意到在通过该方法访问 API 时,我似乎从未收到过 429 响应。在看到有人在 Linux 上遇到 OneDrive 客户端问题的报告后,他们设法通过更改 User-Agent 标头来解决问题,我想也许我需要为我的请求设置一个 User-Agent

结果是,如果我将User-Agent 标头设置为Mozilla/5.0 之类的东西,那么所有限制问题似乎都消失了。我搜索了高低,到目前为止还没有找到任何关于有效User-Agent 应该是什么的文档,我更愿意避免让我的应用程序模拟浏览器,所以我想知道是否有任何指导或文档我可能错过了?

例如,Mozilla/5.0 的 User-Agent 似乎不会导致限制,但 MyApp/1.0 会导致限制。

【问题讨论】:

    标签: microsoft-graph-api onedrive


    【解决方案1】:

    User-Agent 标头没有任何指导,老实说,我不确定为什么这会对限制产生任何影响。

    Microsoft Graph 中的限制由您与之交互的底层服务处理。例如,/notes/ 端点限制由 OneNote 管理,而/messages 由 Exchange 管理。

    在大多数情况下,OneDrive 将根据每个应用、每个用户的并发请求数进行限制。因此,使用委托权限,您的应用程序通常应该能够同时上传 4 个文件而不会出现问题。除此之外,您将开始看到429 回复。

    【讨论】:

    • 这是我所期望的,但是当我使用 User-Agent 模拟浏览器时,我绝对可以看到行为的变化
    • 你能提供一个具体的例子来说明一个有效的和一个无效的吗?
    • 我已编辑问题以包含示例 UserAgents。
    • @MarcLaFleur:谢谢。我假设它会像 endr264u 所说的那样,因为这是他们在 SharePoint 东西中所期望的。很高兴知道 Graph API 不在乎。
    【解决方案2】:

    Microsoft 提供了一些处理限制的最佳实践:

    https://docs.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online#how-to-decorate-your-http-traffic-to-avoid-throttling

    你应该如下装饰你的 http 用户代理:

    NONISV|CompanyName|AppName/Version
    

    标识为 NONISV 并包括公司名称、应用程序名称,以竖线字符分隔,然后添加版本号,以斜线字符分隔

    ISV|CompanyName|AppName/Version
    

    标识为 ISV 并包括公司名称、应用程序名称,以竖线字符分隔,然后添加版本号,以斜线字符分隔

    【讨论】:

    • ISV和NONISV有什么区别?有没有实际意义。
    • NONISV: Enterprise Application -> 应用注册和服务主体都在同一个租户 ISV: 独立软件供应商 -> 应用注册在 ISV-tenant (multi-tenant-app), 一个服务目标租户的委托人必须同意 ISV-App
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多