最近線上 Laravel 錯誤日志發現了一個異常
HTTPException Too Many Attemps
而我一個同事在本地開發的過程中也頻繁遇到這個異常。測試環境:Laravel 5.5。
網上查了一下,是 Laravel 5.2 引入的 throttle middleware 造成的。
源碼參考
https://github.com/illuminate/routing/blob/master/Middleware/ThrottleRequests.php
public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1)
其表現是在 HTTP 的 Response 頭中綴上了請求次數統計
X-RateLimit-Limit:60 X-RateLimit-Remaining:59
從 Chrome 的 console 看,每個 API 請求都會占用這個 limit 的限額。
X-RateLimit-Limit:60 X-RateLimit-Remaining:53
等過一分鍾,再發送一個請求,都會發現限額已經被自動恢復。
對應的配置在 Laravel 項目文件 app/Http/Kernel.php
'api' => [ 'throttle:60,1', 'bindings', ]
所以,
- 第一個參數 60 代表每分鍾限制 60 次請求
- 第二個參數 1 代表觸發了限制規則,則1分鍾內禁止訪問
將 60 調整成 120 就可以保證本地 debug 不會被頻繁限制了。