I found a lot of discussion on how rate limits work, ex: Did Stellar's public Horizon Server Changes its rate limit?

But I can't find X-RateLimit-* headers in any of the responses, ex:

curl -i https://horizon-testnet.stellar.org

HTTP/1.1 200 OK
Date: Thu, 01 Sep 2022 08:16:33 GMT
Content-Type: application/hal+json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache, no-store, max-age=0
Content-Disposition: inline
Vary: Origin

At the same time, when I reach the limit, Horizon answers me the following:

    "type": "https://stellar.org/horizon-errors/rate_limit_exceeded",
    "title": "Rate Limit Exceeded",
    "status": 429,
    "detail": "The rate limit for the requesting IP address is over its alloted limit.  The allowed limit and requests left per time period are communicated to clients via the http response headers 'X-RateLimit-*' headers."

It turns out a contradiction, Horizon tells me to look for them in the headers, but they are not there. At the same time, the rest of the people on the forum are fine, but these discussions are old. Maybe something has changed during this time?

Does anyone know the possible reasons for missing header data?

1 Answer 1


The possible reason is that the public horizons are behind a proxy or load balancer that do not forward the rate limit fields. If you check publicnode, you will see the fields:

curl -i https://horizon.publicnode.org
HTTP/2 200 
date: Thu, 08 Sep 2022 10:35:20 GMT
content-type: application/hal+json; charset=utf-8
cache-control: no-cache, no-store, max-age=0
content-disposition: inline
vary: Accept-Encoding
x-ratelimit-limit: 101
x-ratelimit-remaining: 100
x-ratelimit-reset: 1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.