# HG changeset patch # User Gregory Szorc # Date 2018-03-13 21:15:10 # Node ID 55e901396005c99fd99a3d9c22d0aa6e157194cb # Parent fc5e261915b972dae84dd4a618ef2904b5a52671 hgweb: also set Content-Type header Our HTTP/WSGI server may convert the Content-Type HTTP request header to the CONTENT_TYPE WSGI environment key and not set HTTP_CONTENT_TYPE. Other WSGI server implementations do this, so I think the behavior is acceptable. So assuming this HTTP request header could get "lost" by the WSGI server, let's restore it on the request object like we do for Content-Length. FWIW, the WSGI server may also *invent* a Content-Type value. The default behavior of Python's RFC 822 message class returns a default media type if Content-Type isn't defined. This is kind of annoying. But RFC 7231 section 3.1.1.5 does say the recipient may assume a media type of application/octet-stream. Python's defaults are for text/plain (given we're using an RFC 822 parser). But whatever. Differential Revision: https://phab.mercurial-scm.org/D2849 diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py --- a/mercurial/hgweb/request.py +++ b/mercurial/hgweb/request.py @@ -298,6 +298,9 @@ def parserequestfromenv(env, reponame=No if 'CONTENT_LENGTH' in env and 'HTTP_CONTENT_LENGTH' not in env: headers['Content-Length'] = env['CONTENT_LENGTH'] + if 'CONTENT_TYPE' in env and 'HTTP_CONTENT_TYPE' not in env: + headers['Content-Type'] = env['CONTENT_TYPE'] + bodyfh = env['wsgi.input'] if 'Content-Length' in headers: bodyfh = util.cappedreader(bodyfh, int(headers['Content-Length']))