Skip to content

Commit 555b5d7

Browse files
ThomasHalwaxKitsuneRalHalf-Shot
authored
MSC4041: http header Retry-After for http code 429 (#4041)
* http header Retry-After for http code 429 * MSC id * Update proposals/4041-retry-after-header-rate-limiting.md Thanks for the advice! What a stupid mistake! Co-authored-by: Alexey Rusakov <[email protected]> * notes on backward compatibility * fixes #4041 (comment) * fixed typos * made calculation of the Retry-After header value less explicit * Update proposals/4041-retry-after-header-rate-limiting.md Co-authored-by: Will Hunt <[email protected]> * retry_after_ms gets deprecated * explicit advice for server and client * * moved deprecation into proposal * made Retry-After is a delay --------- Co-authored-by: Alexey Rusakov <[email protected]> Co-authored-by: Will Hunt <[email protected]>
1 parent 1c38196 commit 555b5d7

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# MSC4041: Use http header Retry-After to enable library-assisted retry handling
2+
3+
The current Matrix Client-Server API (v1.7) recommends that home servers should protect themselves from
4+
being overloaded by enforcing rate-limits to selected API calls.
5+
If home servers limit access to an API they respond with an http error code 429 and a response body
6+
that includes a property `retry_after_ms` to indicate how long a client has to wait before retrying.
7+
8+
Some http libraries (like [Ky](https://github.com/sindresorhus/ky), [got](https://github.com/sindresorhus/got
9+
and [urllib3](https://urllib3.readthedocs.io/en/stable/reference/urllib3.util.html#urllib3.util.Retry)) ease
10+
the burden of handling retries by honoring the http header `Retry-After`. As explained in
11+
[RFC 9119 - HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110#field.retry-after) this header is optional
12+
and contains either a (relative) value for the delay in seconds or an (absolute) date.
13+
14+
The current Matrix Client Server API specification does not take this header into account. This wastes the
15+
potential that current http libraries offer in terms of automated retry handling.
16+
17+
## Proposal
18+
19+
In order to allow developers to make use of the automated retry handling capabilities of http libraries
20+
home servers shall use the http header `Retry-After` in case they respond with an http error 429.
21+
The value of `Retry-After` (in __seconds__) is meant to be a delay after receiving the response and must be
22+
calculated in order to comply with the specification in [RFC 9119 - HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110#field.retry-after).
23+
24+
With the introduction of the http header `Retry-After` the usage of the existing `retry_after_ms` property in the response body becomes deprecated.
25+
26+
## Potential issues
27+
28+
In order to maintain backward compatibility with existing client libraries home servers shall use both the `Retry-After` header and the
29+
`retry_after_ms` property in the response body.
30+
31+
Client libraries shall use the values in this order:
32+
33+
1) `Retry-After` http header.
34+
2) `retry_after_ms` property in the response body.
35+
36+
## Alternatives
37+
38+
N/A
39+
40+
## Security considerations
41+
42+
N/A
43+
44+
## Unstable prefix
45+
46+
Since this MSC is using a standard HTTP header, it will not use a unstable prefix.
47+
48+
## Dependencies
49+
50+
N/A

0 commit comments

Comments
 (0)