こんにちは!ドイです!!
先日、友人に「Laravelについて、自分の知らないことを知りたい」
と無理難題を言ったとろ
「Too Many Requestsについて知っている?」と見事、私の知らないことについて教えてくれました。
Laravelについて、少しだけ詳しくなったので、まとめていきたいと思います。
Too Many Requestsとは
ステータスコードでいうところの、429エラーです。 一定時間に送信されたリクエストが多すぎる場合に、429エラーが発生するようです。
ステータスコードとは
「高校生の頃に書いたブログを見てみよう」と久しぶりに覗いてみたら、404エラーが表示された。
なんてことはありませんか?
404がまさにステータスコードと呼ばれるもので、「ブログをみる」というアクションに対しての、
サーバからの返事、と考えると分かりやすいかもしれません。
HTTP レスポンスステータスコードは、特定の HTTP リクエストが正常に完了したどうかを示します。レスポンスは 5 つのクラスに分類されています。
100桁の数字ごとに、グループ分けされています。
100番台
情報
200番台
成功
300番台
リダイレクト
400番台
クライアントエラー
500番台
サーバエラー
どこで設定されているのか
Laravel/app/Http/kernel.phpを見てください。
<?php protected $middlewareGroups = [ 'api' => [ 'throttle:60,1', ], ];
60, 1 この部分で、APIリクエストの回数を1分間に60回と制限しているようです。
対処法
上記の箇所を、
<?php protected $middlewareGroups = [ 'api' => [ 'throttle:600,1', ], ];
のように、時間あたりの回数を設定しなおせば、制限の幅が広がるようです。
throttleの中身
「throttleの中身を見ると面白いよ」との事で、こちら覗いて見ることにしました。
/Illuminate/Routing/Middleware/ThrottleRequests.php
うっ。。すぐに理解できなさそうなコードって、思わずそっ閉じしたくなりますね。。
自分の理解できそうな部分を探してみましょう。。
<? php public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $prefix = '') {
この数字、先ほど見かけましたね。 maxAttemptsで最大の試行回数、decayMinutesで一定期間について書かれていますね。
理解できない部分が多いので、読み飛ばして。。おっ!?
<? php protected function getHeaders($maxAttempts, $remainingAttempts, $retryAfter = null) { $headers = [ 'X-RateLimit-Limit' => $maxAttempts, 'X-RateLimit-Remaining' => $remainingAttempts, ];
X-RateLimit-Limit
この文字面、みたことがある気がします。。
HTML5認定試験のテキストが我が家にあるのですが、
HTTPヘッダについて調べたときに、似たようなものをみた気がするのです。
調べますと。。
X-RateLimit-Limitは受付可能なリクエストの、最大の数を、
その下のX-RateLimit-Remainingは、受付可能な残りのリクエスト数を表しているようです。
すぐに閉じなくてよかったです。。!!
なんとなくですが、設定されている場所と、どう設定されているのかが見えてきましたね。
まとめ
Laravelについて、知らないことが多いなあと思いました。
社内のコードを見ているだけでも、知らないことに遭遇し、
どこまで理解すれば根本から理解したことになるのか?と常に迷子の状態です。
引き続き、勉強を続けていきたいと思います。