From 5b586951c6c4109fbd86178aef85aa11bff8ac40 Mon Sep 17 00:00:00 2001 From: Daniele Gozzi Date: Fri, 16 Jul 2021 18:17:04 +0200 Subject: [PATCH] Ignore unparsable If-Modified-Since headers and return the file Firefox 91 mangling the If-Modified-Since request header with a (perhaps) fractional second? --- tests/test_whitenoise.py | 4 ++++ whitenoise/responders.py | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/test_whitenoise.py b/tests/test_whitenoise.py index 8b0b9deb..39a9db64 100644 --- a/tests/test_whitenoise.py +++ b/tests/test_whitenoise.py @@ -117,6 +117,10 @@ def test_modified(server, files): response = server.get(files.js_url, headers={"If-Modified-Since": last_mod}) assert response.status_code == 200 +def test_modified_mangled_date_firefox_91_0b3(server, files): + last_mod = "Fri, 16 Jul 2021 09:09:1626426577S GMT" + response = server.get(files.js_url, headers={"If-Modified-Since": last_mod}) + assert response.status_code == 200 def test_etag_matches(server, files): response = server.get(files.js_url) diff --git a/whitenoise/responders.py b/whitenoise/responders.py index 645f796e..644d2b77 100644 --- a/whitenoise/responders.py +++ b/whitenoise/responders.py @@ -182,7 +182,10 @@ def is_not_modified(self, request_headers): last_requested = request_headers["HTTP_IF_MODIFIED_SINCE"] except KeyError: return False - return parsedate(last_requested) >= self.last_modified + last_requested_ts = parsedate(last_requested) + if last_requested_ts is not None: + return parsedate(last_requested) >= self.last_modified + return False def get_path_and_headers(self, request_headers): accept_encoding = request_headers.get("HTTP_ACCEPT_ENCODING", "")