【问题标题】:Yii2 RateLimiter header X-Rate-Limit-Reset has wrong valueYii2 RateLimiter header X-Rate-Limit-Reset 值错误
【发布时间】:2017-12-29 10:37:38
【问题描述】:

我一直在努力理解 Yii2 在 this line 中计算的 X-Rate-Limit-Reset 标头值背后的逻辑。

documentation 声明:

X-Rate-Limit-Reset,为了获得最大允许请求数而等待的秒数

所以,如果速率限制是 100 并且时间段/窗口是 3600 秒,那么我理解它应该像这样工作:

  • 请求 #1 在 10:00 返回,标题为 X-Rate-Limit-Reset 3599
  • 请求 #2 在 10:30 返回,标题为 X-Rate-Limit-Reset 1800
  • 请求 #3 在 10:59 返回,标题为 X-Rate-Limit-Reset 59

我是不是误会了什么?或者这是一个错误?

【问题讨论】:

    标签: yii2 yii-rest


    【解决方案1】:

    其实应该是这样的

    • 请求 #1 在 10:00 返回标题 X-Rate-Limit-Reset 36
    • 请求 #2 在 10:30 返回,标题为 X-Rate-Limit-Reset 36
    • 请求 #3 在 10:59 返回,标题为 X-Rate-Limit-Reset 36

    这是因为在速率限制100 / 3600 和稳定的请求数速率下,填充给定窗口 (3600) 需要一百个 36 秒的间隙,因此在第一个请求后 36 秒后,您将再次收到 100 个可以使用的请求。

    不幸的是,Yii 2 中有 bug 具有此功能(它每次都返回 0),但由于您的问题,我能够找到它并提出应该在 2.0.14 中发布的 fix

    【讨论】:

    • 感谢您的解释。我现在明白它应该如何工作了。但是,我真的看不出您所做的提交更改如何解决问题...
    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2020-06-03
    • 2013-12-15
    相关资源
    最近更新 更多