Remove strict check of Transfer-Encoding

This commit is contained in:
Emile Fugulin 2019-11-20 12:24:52 -05:00
parent f74324bd75
commit ddf5e66ac8
5 changed files with 3 additions and 31 deletions

View File

@ -118,11 +118,3 @@ class ForbiddenProxyRequest(ParseException):
class InvalidSchemeHeaders(ParseException): class InvalidSchemeHeaders(ParseException):
def __str__(self): def __str__(self):
return "Contradictory scheme headers" return "Contradictory scheme headers"
class UnsupportedTransferEncoding(ParseException):
def __init__(self, te):
self.te = te
def __str__(self):
return "Unsupported Transfer-Encoding: %s" % self.te

View File

@ -12,7 +12,7 @@ from gunicorn.http.unreader import SocketUnreader
from gunicorn.http.body import ChunkedReader, LengthReader, EOFReader, Body from gunicorn.http.body import ChunkedReader, LengthReader, EOFReader, Body
from gunicorn.http.errors import (InvalidHeader, InvalidHeaderName, NoMoreData, from gunicorn.http.errors import (InvalidHeader, InvalidHeaderName, NoMoreData,
InvalidRequestLine, InvalidRequestMethod, InvalidHTTPVersion, InvalidRequestLine, InvalidRequestMethod, InvalidHTTPVersion,
LimitRequestLine, LimitRequestHeaders, UnsupportedTransferEncoding) LimitRequestLine, LimitRequestHeaders)
from gunicorn.http.errors import InvalidProxyLine, ForbiddenProxyRequest from gunicorn.http.errors import InvalidProxyLine, ForbiddenProxyRequest
from gunicorn.http.errors import InvalidSchemeHeaders from gunicorn.http.errors import InvalidSchemeHeaders
from gunicorn.util import bytes_to_str, split_request_uri from gunicorn.util import bytes_to_str, split_request_uri
@ -135,13 +135,8 @@ class Message(object):
raise InvalidHeader("CONTENT-LENGTH", req=self) raise InvalidHeader("CONTENT-LENGTH", req=self)
content_length = value content_length = value
elif name == "TRANSFER-ENCODING": elif name == "TRANSFER-ENCODING":
normalized_value = value.lower() if value.lower() == "chunked":
if normalized_value == "identity":
pass
elif normalized_value == "chunked":
chunked = True chunked = True
else:
raise UnsupportedTransferEncoding(normalized_value)
elif name == "SEC-WEBSOCKET-KEY1": elif name == "SEC-WEBSOCKET-KEY1":
content_length = 8 content_length = 8

View File

@ -20,7 +20,6 @@ from gunicorn.http.errors import (
InvalidProxyLine, InvalidRequestLine, InvalidProxyLine, InvalidRequestLine,
InvalidRequestMethod, InvalidSchemeHeaders, InvalidRequestMethod, InvalidSchemeHeaders,
LimitRequestHeaders, LimitRequestLine, LimitRequestHeaders, LimitRequestLine,
UnsupportedTransferEncoding
) )
from gunicorn.http.wsgi import Response, default_environ from gunicorn.http.wsgi import Response, default_environ
from gunicorn.reloader import reloader_engines from gunicorn.reloader import reloader_engines
@ -207,7 +206,7 @@ class Worker(object):
LimitRequestLine, LimitRequestHeaders, LimitRequestLine, LimitRequestHeaders,
InvalidProxyLine, ForbiddenProxyRequest, InvalidProxyLine, ForbiddenProxyRequest,
InvalidSchemeHeaders, InvalidSchemeHeaders,
SSLError, UnsupportedTransferEncoding)): SSLError)):
status_int = 400 status_int = 400
reason = "Bad Request" reason = "Bad Request"
@ -238,10 +237,6 @@ class Worker(object):
reason = "Forbidden" reason = "Forbidden"
mesg = "'%s'" % str(exc) mesg = "'%s'" % str(exc)
status_int = 403 status_int = 403
elif isinstance(exc, UnsupportedTransferEncoding):
reason = "Not implemented"
mesg = "'%s'" % str(exc)
status_int = 501
msg = "Invalid request from ip={ip}: {error}" msg = "Invalid request from ip={ip}: {error}"
self.log.debug(msg.format(ip=addr[0], error=str(exc))) self.log.debug(msg.format(ip=addr[0], error=str(exc)))

View File

@ -1,5 +0,0 @@
GET /stuff/here?foo=bar HTTP/1.1\r\n
Transfer-Encoding: chunked\r\n
Transfer-Encoding: compress\r\n
\r\n
xyz

View File

@ -1,5 +0,0 @@
from gunicorn.config import Config
from gunicorn.http.errors import UnsupportedTransferEncoding
cfg = Config()
request = UnsupportedTransferEncoding