Hi,
Shouldn’t the delay to wait be in the Response as a Retry-After header?
Hi,
Shouldn’t the delay to wait be in the Response as a Retry-After header?
Sure, sounds like a good suggestion
Taking a stab at this ![]()
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.
Hola,
Parece que la PR se ha fusionado, pero no observo ninguna cabecera ‘Retry-After’.
Aquí puedes ver el cuerpo de mi error:
¿Es esto un error? Gracias de antemano.
¡Buena sugerencia!
Mientras tanto, el IETF ha estandarizado las cabeceras para informar a los programas que llaman sobre la limitación de la tasa; véase RateLimit Header Fields for HTTP. Nuestro software las utiliza para una serie de limitadores de tasa (véase Fair Use Daily Limits for a Better User Experience - invantive).
En nuestro caso, sería de gran ayuda que Discourse devolviera información sobre la limitación de la tasa a través de las cabeceras; los programas no tienen acceso al archivo de configuración y no tenemos ni idea exacta sin preguntar cuáles son las definiciones. Tampoco nuestro software que llama puede intentar evadir un 429 probando alternativas cuando la limitación de la tasa está a la vista.
En la v3, están presentes las siguientes cabeceras que proporcionan alguna orientación:
Retry-After: número de segundos después de los cuales expira la ventana de limitación de la tasa y se permite un nuevo conjunto de llamadas a la API.Discourse-Rate-Limit-Error-Code: una indicación de qué tipo de limitación de tasa se ha alcanzado (como admin_api_key_rate_limit o ip_10_secs_limit).En HTTP 429, la carga útil también contiene algunas pistas, pero nada adicional en comparación con las cabeceras HTTP:
{
"errors": [
"i18n text"
],
"error_type": "rate_limit",
"extras": {
"wait_seconds": 21,
"time_left": "21 seconden"
}
}
Tenga en cuenta que estas cabeceras solo se devuelven en caso de 429. No es posible predecir un fallo inminente para retroceder un poco.