在舞弊舞臺上,這些被稱爲速度控制,在交通管理中它類似於「流量整形」。基本上你每個時間段允許有限的使用,例如,你可能只允許10個請求/分鐘/ IP地址。
對於每個'請求',確定遠程地址(C中的getpeername()),這個函數將永遠是遠程用戶的ip地址。然後簡單地按每個時間段計算處理請求的方式,如果超出限制,請執行任何操作。在僞代碼
Get block for remote ip
If time-now is new window, then reset usage to zero
Add one to usage count
If usage > allowance then .....
Else if usage > allowance*0.75 then slow-down
Else ok
雖然我已經展示了一個時期,大多數的實現通常在幾個時期的平均水平,例如每分鐘一小時等等,他們也傾向於允許突發和只能限制持續的負荷,但這取決於您希望允許的配置文件。
如果這是針對API的,那麼只是減慢請求速度而不是提供硬錯誤是正常的。不保證另一端的客戶端會處理錯誤。如果是用戶屏幕,則可以顯示超出的限制。
您當然可以通過您希望的任何維度,ip地址,引用,瀏覽器類型!,pageurl,cookie來限制。如果您使用的是getpeername,請注意,如果幾個併發用戶位於公共專用路由器的後面,則它們都可以具有相同的遠程IP地址。
來源
2013-03-18 03:41:10
rlb
不是100%確定你的意思。他們將查看作爲請求源的遠程IP地址。你的意思是「提出請求的網站」? – Anorov 2013-03-17 03:38:47
因此,如果XHR從網頁上提出請求,他們會通過網頁進行費率限制,而不是訪問該網站的人,對吧? – NickAldwin 2013-03-17 03:40:57
他們想基於應用程序對API密鑰進行速率限制/傳遞,而不是基於應用程序的用戶,對吧? – NickAldwin 2013-03-17 03:42:25