When the server gets overloaded and lots of requests start queuing server will attempt to shed load by returning 429 errors on background requests.
The client can flag a request as background by setting the header:
Out-of-the-box we shed load when the queue time goes above 0.5 seconds.
The only request we shed at the moment is the request to load up a new post when someone posts to a topic.
We can extend this as we go with a more general pattern on the client.
Previous to this change, rate limiting would “break” the post stream which would make suggested topics vanish and users would have to scroll the page to see more posts in the topic.
Server needs this protection for cases where tons of clients are navigated to a topic and a new post is made. This can lead to a self inflicted denial of service if enough clients are viewing the topic.
Due to the internal security design of Discourse it is hard for a large number of clients to share a channel where we would pass the full post body via the message bus.