クライアントのリクエストが速すぎます。
使いどころ
レート制限。Retry-After ヘッダーを含めます。
よくある原因と対処法
レート制限に達しました。Retry-After ヘッダー(秒数または HTTP の日付)と、RateLimit や X-RateLimit-Remaining などのヘッダーを読み、すぐに再試行するのではなく、ジッター付きの指数バックオフで間隔を空けてください。よくある発生源は、キーや IP ごとの API クォータ、Cloudflare のレート制限ルール、ログインのスロットリング、そして limit_req_status 429 を設定しない限り 503 を返す nginx の limit_req です。
1 つの NAT や社内プロキシの背後にいる多数のユーザーが、まとめて IP 単位の制限に引っかかることがあります。ロードバランサーの背後でリミッターを動かす場合は、X-Forwarded-For から得た実際のクライアント IP をキーにしてください。そうしないと、全ユーザーがロードバランサーのアドレスとクォータを共有することになります。クライアント側では、リクエストをまとめる、レスポンスをキャッシュする、スケジュールされたジョブにランダムな遅延を加えて全部が同じ秒に起動しないようにする、といった対策をとりましょう。
クライアントエラー (4xx)
4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。
レスポンスでの表示
HTTP/1.1 429 Too Many Requests返し方
| Node.js / Express | res.status(429).end() |
|---|---|
| Python / Flask | return '', 429 |
| nginx | return 429; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/