summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2018-03-21 17:46:26 +0000
committerErik Johnston <erik@matrix.org>2018-03-21 17:46:26 +0000
commit1c41b05c8c98f0b9157c791b5b8ebf5f9fe85acf (patch)
tree1c02e6fe77ddd5a596668743852fe5610f2a25e7 /synapse
parentMerge pull request #3015 from matrix-org/erikj/simplejson_replication (diff)
downloadsynapse-1c41b05c8c98f0b9157c791b5b8ebf5f9fe85acf.tar.xz
Add Cache-Control headers to all JSON APIs
It is especially important that sync requests don't get cached, as if a
sync returns the same token given then the client will call sync with
the same parameters again. If the previous response was cached it will
get reused, resulting in the client tight looping making the same
request and never making any progress.

In general, clients will expect to get up to date data when requesting
APIs, and so its safer to do a blanket no cache policy than only
whitelisting APIs that we know will break things if they get cached.
Diffstat (limited to 'synapse')
-rw-r--r--synapse/http/server.py1
1 files changed, 1 insertions, 0 deletions
diff --git a/synapse/http/server.py b/synapse/http/server.py
index 1551db239d..f19c068ef6 100644
--- a/synapse/http/server.py
+++ b/synapse/http/server.py
@@ -488,6 +488,7 @@ def respond_with_json_bytes(request, code, json_bytes, send_cors=False,
     request.setHeader(b"Content-Type", b"application/json")
     request.setHeader(b"Server", version_string)
     request.setHeader(b"Content-Length", b"%d" % (len(json_bytes),))
+    request.setHeader(b"Cache-Control", b"no-cache, no-store, must-revalidate")
 
     if send_cors:
         set_cors_headers(request)