亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么請求被限制的時間超過了中間件中指定的時間?

為什么請求被限制的時間超過了中間件中指定的時間?

PHP
慕標5832272 2022-11-04 17:12:59
我的路線聲明如下:Route::group(['prefix' => 'media', 'middleware' => 'auth'], function() {    Route::group(['middleware' => 'throttle:120,1'], function() {        Route::get('/', 'MediaController@index'); // <-- Route in question        Route::delete('/{id}', 'MediaController@delete');        Route::patch('/{id}', 'MediaController@edit');    });    Route::post('/', 'MediaController@upload')->middleware('throttle:100,1440');});如果我正確理解了限制中間件,當用戶達到速率限制(1 分鐘內 120 個請求)時,他應該在 1 分鐘的剩余時間內受到限制,然后解除阻塞。但是,阻塞時間高于 1 分鐘。見retry-after標題:(當我第一次注意到它時,它超過了 600 秒,所以并不總是 180 秒)任何想法為什么它會高于 1 分鐘?
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

retry-after頭與速率限制無關。所有與速率限制相關的標頭都以x-ratelimit-. 標頭x-ratelimit-reset是您要查找的內容:限制何時重置的時間戳。這應該在下一分鐘內(或您設置的任何時間段)



查看完整回答
反對 回復 2022-11-04
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

我想到了!

原來throttle中間件的默認行為不適用于每個路由。它只是限制每個登錄用戶的請求。如您所見,我有一條路線(上傳路線)具有throttle:100,1440,這會導致問題導致更長的“懲罰”,即使對于具有throttle:120,1.

我的解決方案: 我編寫了自己的ThrottleRequests.php中間件版本,適用于每個路由:

  1. 將此文件放在您的app/Http/Middleware文件夾中。

  2. app/Http/Kernel.php將油門路由中間件更改為新的中間件:

'throttle' => \App\Http\Middleware\ThrottleRequestsPerRoute::class,
  1. 現在,每當您分配throttle中間件時,它都會按路由工作。

另一種解決方案: 您也可以使用默認中間件并使用第三個參數。您可以傳遞這樣的前綴參數:throttle:100,1440,upload. 它將上傳前綴分配給限制鍵并基于此限制請求的速率。但是,要實現每條路由的速率限制,您必須為每條路由分配不同的前綴。


查看完整回答
反對 回復 2022-11-04
  • 2 回答
  • 0 關注
  • 120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號