Fix MSC4108 'rendez-vous' responses with some reverse proxy in the front of Synapse #18178
+10
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
MSC4108 relies on ETag to determine if something has changed on the rendez-vous channel.
Strong and correct ETag comparison works if the response body is bit-for-bit identical, which isn't the case if a proxy in the middle compresses the response on the fly.
This adds a
no-transform
directive to theCache-Control
header, which tells proxies not to transform the response body.Additionally, some proxies (nginx) will switch to
Transfer-Encoding: chunked
if it doesn't know the Content-Length of the response, and 'weakening' the ETag if that's the case. I've addedContent-Length
headers to all responses, to hopefully solve that.This basically fixes QR-code login when nginx or cloudflare is involved, with gzip/zstd/deflate compression enabled.