Rate Limiting
Al fine sia di evitare un abuso nelle richieste e per impedire/contenere gli attacchi da soggetti male intenzionati, sono effettuati vari controlli per limitare il numero di richieste (Rate Limiting) che possono essere inviate all'API.
I limiti applicati possono variare a seconda della funzionalità corrispondente ad un endpoint richiesto.
L'algoritmo utilizzato per limitare gli accessi, denominato Token Bucket, si basa sul concetto di token (gettone). Viene indicato un numero di token richiesti per ogni endpoint, un tasso di riempimento dei token al secondo e una capacità massima di token disponibili (burst).
A ogni risposta ottenuta da un endpoint a cui sono applicati i limiti, vengono aggiunti i seguenti header:
X-Ratelimit-Burst-Capacity: 100
X-Ratelimit-Remaining: 99
X-Ratelimit-Replenish-Rate: 2
X-Ratelimit-Requested-Tokens: 1
Nell'esempio è riportato che:
- il totale di token disponibili è 100 (X-Ratelimit-Burst-Capacity)
- l'endpoint utilizzato consuma 1 token (X-Ratelimit-Requested-Tokens)
- rimangono ancora 99 token disponibili (X-Ratelimit-Remaining)
- i token si ricaricano ad un ritmo di 2 token al secondo (X-Ratelimit-Replenish-Rate).
Info
Il consumo di token (X-Ratelimit-Requested-Tokens) può variare notevolmente a seconda dell'endpoint utilizzato, ad esempio alcune ricerche potrebbero consumare un numero maggiore di token rispetto ad altre funzionalità
L'applicazione dei limiti varia a seconda che sia richiesta o meno l'autenticazione per accedere all'endpoint utilizzato:
- per gli endpoint per i quali non è richiesta l'autenticazione, i limiti sono applicati sulla base dell'indirizzo IP del client richiedente
- per gli endpoint autenticati e riservati ai Registrar, i limiti sono applicati per Registrar e non per utente, pertanto la quantità di token disponibili (X-Ratelimit-Burst-Capacity) è unica indipendentemente da quale utente dello stesso Registrar viene utilizzato per accedere.
In caso di superamento dei limiti si ottiene una risposta HTTP con codice 429 Too Many Requests.
Tuttavia, nel caso in cui il numero di richieste proveniente dallo stesso client fosse molto elevato,gli apparati di rete o firewall limiterebbero o bloccherebbero il traffico TCP/IP proveniente dal client. In questo caso quindi non si otterrebbe una risposta HTTP valida.