(403) 放置时出现禁止错误,但重试时成功

Posted

技术标签:

【中文标题】(403) 放置时出现禁止错误,但重试时成功【英文标题】:(403) Forbidden Error on Put but succeeds on retry 【发布时间】:2020-11-15 09:59:02 【问题描述】:

在一个有很多这样的 Put 的程序中间:

2020-07-20 21:48:20 -04 -:Put - 开始:b4bc325b682cf4f3199737dbc95d54d8c.dblock.zip.aes (49.92 MB)

2020-07-20 22:00:48 -04 - [Retry-RetryPut]:操作 Put 使用文件 b4bc325b682cf4f3199737dbc95d54d8c.dblock.zip.aes 尝试 1 of 5 失败,并显示消息:远程服务器返回错误:(403 ) 禁止。

我收到了禁止消息。他们都去同一个文件夹,但有些像这样失败然后重试成功。

当我查看记录在案的 403 错误以及以下 URL 中的消息时,Forbidden 不是其中之一

https://developers.google.com/drive/api/v3/handle-errors

有没有人更清楚 403 Forbidden

【问题讨论】:

实际上 403 记录在您提供的链接中,添加说:“超出使用限制或用户没有正确的权限时会发生错误 403。”如果重试成功,我预计这是您达到的使用限制。 Sellotape:如果你再看一点,它实际上对每个条件都有一条消息,但“禁止”不是其中之一。另外这个账号也没有空间限制,至于权限,秒后重试成功。,有100个类似的puts写文件到同一个文件夹,这个和大多数第一次成功的没有什么不同。我正在尝试找出重试的确切原因。 403 和 "forbidden" 在 HTTP 中是 synonymous,所以 403 总是意味着(某种变体)被禁止。 Google 使用相同的代码来涵盖他们禁止您的请求的一系列不同原因。他们确实说响应还包含一个“响应正文中带有附加详细信息的 JSON 对象”;如果你能看到这一点,事情可能会变得更清楚。 您对所有这些文件执行的确切请求是什么?你能提供一个代码sn-p吗?您能否区分工作请求和不工作请求(共享驱动器上的文件?您具有只读访问权限的文件?)。您每分钟/每天执行多少个请求? 【参考方案1】:

您的问题是 Google 不喜欢您过快发送太多 PUT。您需要在客户端限制它们。在开始看到此错误之前,您可以快速连续使用 20 个左右。一旦你得到它,将你的提交率降低到大约每 1.5 秒 1 次。您可以尝试加速直到错误再次出现,然后再减速。

忽略任何建议您实施指数退避的人 - 他们在撒谎。

另请参阅https://issuetracker.google.com/issues/36758996,如果您不进行限制,您会遇到一个错误(尽管 PUT 通常是幂等的,因此对您的影响小于发布新文件时的影响)。

【讨论】:

如果它的 put 率不应该我得到 "code": 403, "message": "User Rate Limit Exceeded" 而不是我上面发布的 API 文档中的 Forbidden? 我怀疑您处于 http 级别,但是生成错误消息的任何代码都掩盖了它。有多种方法可以证实我的怀疑。 1/ 查看原始 http ,2/ 错误是否在前 20-30 个 PUT 之后开始,3/ 如果您将 PUT 减慢到大约 2 秒,错误是否会消失。

以上是关于(403) 放置时出现禁止错误,但重试时成功的主要内容,如果未能解决你的问题,请参考以下文章

通过 SSL 调用 Web Api 时出现 403 禁止错误

如何解决安装IIS时出现HTTP错误403禁止访问?

为 Google 课堂获取课程列表时出现 403 禁止错误

发送 GET 数据时出现 403 禁止错误

发出 ajax Post 请求时出现 403 禁止错误

运行 apache 时出现禁止的 403 错误