Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 6a080ea

Browse files
authored
Return an empty body for OPTIONS requests. (#7886)
1 parent 1ec688b commit 6a080ea

File tree

3 files changed

+12
-25
lines changed

3 files changed

+12
-25
lines changed

changelog.d/7886.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Return an empty body for OPTIONS requests.

synapse/http/server.py

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -442,21 +442,6 @@ def render_GET(self, request: Request):
442442
return super().render_GET(request)
443443

444444

445-
def _options_handler(request):
446-
"""Request handler for OPTIONS requests
447-
448-
This is a request handler suitable for return from
449-
_get_handler_for_request. It returns a 200 and an empty body.
450-
451-
Args:
452-
request (twisted.web.http.Request):
453-
454-
Returns:
455-
Tuple[int, dict]: http code, response body.
456-
"""
457-
return 200, {}
458-
459-
460445
def _unrecognised_request_handler(request):
461446
"""Request handler for unrecognised requests
462447
@@ -490,11 +475,12 @@ class OptionsResource(resource.Resource):
490475
"""Responds to OPTION requests for itself and all children."""
491476

492477
def render_OPTIONS(self, request):
493-
code, response_json_object = _options_handler(request)
478+
request.setResponseCode(204)
479+
request.setHeader(b"Content-Length", b"0")
494480

495-
return respond_with_json(
496-
request, code, response_json_object, send_cors=True, canonical_json=False,
497-
)
481+
set_cors_headers(request)
482+
483+
return b""
498484

499485
def getChildWithDefault(self, path, request):
500486
if request.method == b"OPTIONS":

tests/test_server.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,10 @@ def _make_request(self, method, path):
193193
return channel
194194

195195
def test_unknown_options_request(self):
196-
"""An OPTIONS requests to an unknown URL still returns 200 OK."""
196+
"""An OPTIONS requests to an unknown URL still returns 204 No Content."""
197197
channel = self._make_request(b"OPTIONS", b"/foo/")
198-
self.assertEqual(channel.result["code"], b"200")
199-
self.assertEqual(channel.result["body"], b"{}")
198+
self.assertEqual(channel.result["code"], b"204")
199+
self.assertNotIn("body", channel.result)
200200

201201
# Ensure the correct CORS headers have been added
202202
self.assertTrue(
@@ -213,10 +213,10 @@ def test_unknown_options_request(self):
213213
)
214214

215215
def test_known_options_request(self):
216-
"""An OPTIONS requests to an known URL still returns 200 OK."""
216+
"""An OPTIONS requests to an known URL still returns 204 No Content."""
217217
channel = self._make_request(b"OPTIONS", b"/res/")
218-
self.assertEqual(channel.result["code"], b"200")
219-
self.assertEqual(channel.result["body"], b"{}")
218+
self.assertEqual(channel.result["code"], b"204")
219+
self.assertNotIn("body", channel.result)
220220

221221
# Ensure the correct CORS headers have been added
222222
self.assertTrue(

0 commit comments

Comments
 (0)