mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-13 23:33:47 +01:00
MSC4108: Add a Content-Type header on the PUT response (#17253)
This is a workaround for some proxy setup, where the ETag header gets stripped from the response headers unless there is a Content-Type header set. In particular, we saw this bug when putting Cloudflare in front of Synapse. I'm pretty sure this is a Cloudflare bug, as this behaviour isn't documented anywhere, and doesn't make sense whatsoever. --------- Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com>
This commit is contained in:
parent
a9c4d1c8ac
commit
cee9da0da5
2 changed files with 8 additions and 0 deletions
1
changelog.d/17253.misc
Normal file
1
changelog.d/17253.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[MSC4108](https://github.com/matrix-org/matrix-spec-proposals/pull/4108): Add a `Content-Type` header on the `PUT` response to work around a faulty behavior in some caching reverse proxies.
|
|
@ -288,6 +288,13 @@ impl RendezvousHandler {
|
||||||
let mut response = Response::new(Bytes::new());
|
let mut response = Response::new(Bytes::new());
|
||||||
*response.status_mut() = StatusCode::ACCEPTED;
|
*response.status_mut() = StatusCode::ACCEPTED;
|
||||||
prepare_headers(response.headers_mut(), session);
|
prepare_headers(response.headers_mut(), session);
|
||||||
|
|
||||||
|
// Even though this isn't mandated by the MSC, we set a Content-Type on the response. It
|
||||||
|
// doesn't do any harm as the body is empty, but this helps escape a bug in some reverse
|
||||||
|
// proxy/cache setup which strips the ETag header if there is no Content-Type set.
|
||||||
|
// Specifically, we noticed this behaviour when placing Synapse behind Cloudflare.
|
||||||
|
response.headers_mut().typed_insert(ContentType::text());
|
||||||
|
|
||||||
http_response_to_twisted(twisted_request, response)?;
|
http_response_to_twisted(twisted_request, response)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in a new issue