diff --git a/radicale/app/__init__.py b/radicale/app/__init__.py index 6ff6840..68799e5 100644 --- a/radicale/app/__init__.py +++ b/radicale/app/__init__.py @@ -121,6 +121,9 @@ class Application(ApplicationPartDelete, ApplicationPartHead, def _handle_request(self, environ: types.WSGIEnviron ) -> _IntermediateResponse: + time_begin = datetime.datetime.now() + request_method = environ["REQUEST_METHOD"].upper() + """Manage a request.""" def response(status: int, headers: types.WSGIResponseHeaders, answer: Union[None, str, bytes]) -> _IntermediateResponse: @@ -144,7 +147,8 @@ class Application(ApplicationPartDelete, ApplicationPartHead, headers["Content-Encoding"] = "gzip" headers["Content-Length"] = str(len(answer)) - answers.append(answer) + if request_method != "HEAD": + answers.append(answer) # Add extra headers set in configuration headers.update(self._extra_headers) @@ -161,8 +165,6 @@ class Application(ApplicationPartDelete, ApplicationPartHead, # Return response content return status_text, list(headers.items()), answers - time_begin = datetime.datetime.now() - request_method = environ["REQUEST_METHOD"].upper() unsafe_path = environ.get("PATH_INFO", "") remote_host = "unknown" if environ.get("REMOTE_HOST"): diff --git a/radicale/app/head.py b/radicale/app/head.py index af39873..99af526 100644 --- a/radicale/app/head.py +++ b/radicale/app/head.py @@ -27,5 +27,4 @@ class ApplicationPartHead(ApplicationPartGet, ApplicationBase): def do_HEAD(self, environ: types.WSGIEnviron, base_prefix: str, path: str, user: str) -> types.WSGIResponse: """Manage HEAD request.""" - status, headers, _ = self.do_GET(environ, base_prefix, path, user) - return status, headers, None + return self.do_GET(environ, base_prefix, path, user) diff --git a/radicale/tests/test_base.py b/radicale/tests/test_base.py index 9b16ba6..52c482e 100644 --- a/radicale/tests/test_base.py +++ b/radicale/tests/test_base.py @@ -382,8 +382,9 @@ permissions: RrWw""") assert xml.find(xmlutils.make_clark("C:no-uid-conflict")) is not None def test_head(self) -> None: - status, _, _ = self.request("HEAD", "/") + status, headers, answer = self.request("HEAD", "/") assert status == 302 + assert int(headers.get("Content-Length", "0")) > 0 and not answer def test_options(self) -> None: status, headers, _ = self.request("OPTIONS", "/")