HTTPリクエストのレートリミットを示すRateLimitレスポンスヘッダの提案仕様

一定時間内でWeb APIを叩く回数などが制限されているサービス等は多々あります。制限に引っかかった場合は429 Too Many Requests レスポンスが返されます。

このとき、レスポンスヘッダやボディでリミットに関する情報が提供される場合がありますが、標準化された方法はありません。

そこで、先日提出された提案仕様「RateLimit Header Fields for HTTP」では、HTTPレスポンスでレートリミットに関する情報を通知するヘッダを定義します。

  • RateLimit-Limit: 単位時間内のリクエスト上限
  • RateLimit-Remaining: 現在の単位時間内の残りリクエスト回数
  • RateLimit-Reset: 上限がリセットされるまでの期間(秒)、もしくはタイムスタンプ

例1

今の上限は100で、残り20、リセットされるまで56秒です。

RateLimit-Limit: 100
RateLimit-Remaining: 20
RateLimit-Reset: 56
例2

RateLimit-Limitヘッダには","区切りで複数のウィンドを指定することができます。
以下の例では、1時間ごとに3600, 1日で5000リクエストの制限があることを示しています。

次のシチュエーションは次のとおりです。最初の14時間で4900リクエストを消費してしまったので、今の制限はトータル5000リクエストの制限状態で有ることを示しています。
そして、上限がリセットされるのは10時間後となっています。

RateLimit-Limit: 5000, 1000;window=3600, 5000;window=86400
RateLimit-Remaining: 100
RateLimit-Reset: 36000
例3

RateLimit-Resetは、IMF-fixdate形式でも指定できます

RateLimit-Reset: Tue, 15 Nov 1994 08:12:31 GMT