Lorsque la limite de taux est atteinte, renvoyer un en-tête Retry-After

Hi,

Shouldn’t the delay to wait be in the Response as a Retry-After header?

5 « J'aime »

Sure, sounds like a good suggestion

3 « J'aime »

Taking a stab at this :wink:


https://github.com/discourse/discourse/pull/5659


I am assuming:

Retry-After shouldn’t be set in controller actions like the following, where the retry time is (intentionally) hidden from the end user.

https://github.com/xrav3nz/discourse/blob/60e5f39130ca1e4711400955969990fa283fa969/app/controllers/invites_controller.rb#L151

6 « J'aime »

Hi,

Seems like the PR is merged but I don’t observe any ‘Retry-After’ headers.
Here you can see the body of my error:


And here you can see the headers:

Is this a bug? Thanks in advance

Bonne suggestion !

Entre-temps, l’IETF a standardisé les en-têtes pour informer les programmes appelants sur la limitation du débit ; voir RateLimit Header Fields for HTTP. Nos logiciels les utilisent pour une gamme de limiteurs de débit (voir Fair Use Daily Limits for a Better User Experience - invantive).

Dans notre cas, cela aiderait certainement si Discourse renvoyait des informations sur la limitation du débit via des en-têtes ; les programmes n’ont pas accès au fichier de configuration et nous n’avons aucune idée précise sans demander quelles sont les définitions. Notre logiciel appelant ne peut pas non plus tenter d’éviter un 429 en essayant des alternatives lorsque la limite de débit est en vue.

Statut V3

Sur la v3, les en-têtes suivants sont présents et fournissent des indications :

  • Retry-After : nombre de secondes après lesquelles la fenêtre de limitation du débit expire et un nouvel ensemble d’appels API est autorisé
  • Discourse-Rate-Limit-Error-Code : indication du type de limite de débit qui est atteint (tel que admin_api_key_rate_limit ou ip_10_secs_limit).

Sur HTTP 429, la charge utile contient également quelques indices, mais rien de plus par rapport aux en-têtes HTTP :

{
    "errors": [
        "i18n text"
    ],
    "error_type": "rate_limit",
    "extras": {
        "wait_seconds": 21,
        "time_left": "21 seconden"
    }
}

Notez que ces en-têtes ne sont renvoyés qu’en cas de 429. Il n’est pas possible de prédire un échec imminent pour ralentir un peu.