# HG changeset patch # User Gregory Szorc # Date 2018-05-01 00:22:20 # Node ID 11ee9bf247914deda280ab0e409c611da58785cb # Parent d105bbb74658654555b665d9cdd586dd27592272 hgweb: discard Content-Type header for 304 responses (issue5844) A side-effect of 98baf8dea553 was that hgwebdir always sets a global default for the Content-Type header. HTTP 304 responses don't allow the Content-Type header. So a side-effect of this change was that HTTP 304 responses served via hgwebdir resulted in a ProgrammingError being raised. This commit teaches our 304 response issuing code to drop the Content-Type header. Differential Revision: https://phab.mercurial-scm.org/D3435 diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py --- a/mercurial/hgweb/hgweb_mod.py +++ b/mercurial/hgweb/hgweb_mod.py @@ -399,6 +399,12 @@ class hgweb(object): tag = 'W/"%d"' % self.mtime if req.headers.get('If-None-Match') == tag: res.status = '304 Not Modified' + # Content-Type may be defined globally. It isn't valid on a + # 304, so discard it. + try: + del res.headers[b'Content-Type'] + except KeyError: + pass # Response body not allowed on 304. res.setbodybytes('') return res.sendresponse() diff --git a/tests/test-hgweb.t b/tests/test-hgweb.t --- a/tests/test-hgweb.t +++ b/tests/test-hgweb.t @@ -890,9 +890,7 @@ HTTP 304 works with hgwebdir (issue5844) 200 Script output follows content-length: 2677 content-type: text/css - 500 Internal Server Error - transfer-encoding: chunked - [1] + 304 Not Modified $ killdaemons.py