mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
more optimisations. no need to uppercase or lowercase each time we want
to test an header since the parser already send the headers in uppercase
This commit is contained in:
parent
e8bc2cdae8
commit
42d97c3815
@ -62,18 +62,20 @@ class Message(object):
|
|||||||
def set_body_reader(self):
|
def set_body_reader(self):
|
||||||
chunked = False
|
chunked = False
|
||||||
clength = None
|
clength = None
|
||||||
|
|
||||||
for (name, value) in self.headers:
|
for (name, value) in self.headers:
|
||||||
if name.upper() == "CONTENT-LENGTH":
|
if name == "CONTENT-LENGTH":
|
||||||
try:
|
try:
|
||||||
clength = int(value)
|
clength = int(value)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
clength = None
|
clength = None
|
||||||
elif name.upper() == "TRANSFER-ENCODING":
|
elif name == "TRANSFER-ENCODING":
|
||||||
chunked = value.lower() == "chunked"
|
chunked = value.lower() == "chunked"
|
||||||
elif name.upper() == "SEC-WEBSOCKET-KEY1":
|
elif name == "SEC-WEBSOCKET-KEY1":
|
||||||
clength = 8
|
clength = 8
|
||||||
|
|
||||||
|
if clength is not None or chunked:
|
||||||
|
break
|
||||||
|
|
||||||
if chunked:
|
if chunked:
|
||||||
self.body = Body(ChunkedReader(self, self.unreader))
|
self.body = Body(ChunkedReader(self, self.unreader))
|
||||||
elif clength is not None:
|
elif clength is not None:
|
||||||
@ -83,11 +85,13 @@ class Message(object):
|
|||||||
|
|
||||||
def should_close(self):
|
def should_close(self):
|
||||||
for (h, v) in self.headers:
|
for (h, v) in self.headers:
|
||||||
if h.lower() == "connection":
|
if h == "CONNECTION":
|
||||||
if v.lower().strip() == "close":
|
v = v.lower().strip()
|
||||||
|
if v == "close":
|
||||||
return True
|
return True
|
||||||
elif v.lower().strip() == "keep-alive":
|
elif v == "keep-alive":
|
||||||
return False
|
return False
|
||||||
|
break
|
||||||
return self.version <= (1, 0)
|
return self.version <= (1, 0)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -32,24 +32,23 @@ def create(req, sock, client, server, cfg):
|
|||||||
content_type = ""
|
content_type = ""
|
||||||
content_length = ""
|
content_length = ""
|
||||||
for hdr_name, hdr_value in req.headers:
|
for hdr_name, hdr_value in req.headers:
|
||||||
name = hdr_name.lower()
|
if hdr_name == "EXPECT":
|
||||||
if name == "expect":
|
|
||||||
# handle expect
|
# handle expect
|
||||||
if hdr_value.lower() == "100-continue":
|
if hdr_value.lower() == "100-continue":
|
||||||
sock.send("HTTP/1.1 100 Continue\r\n\r\n")
|
sock.send("HTTP/1.1 100 Continue\r\n\r\n")
|
||||||
elif name == "x-forwarded-for":
|
elif hdr_name == "X-FORWARDED-FOR":
|
||||||
forward = hdr_value
|
forward = hdr_value
|
||||||
elif name == "x-forwarded-protocol" and hdr_value.lower() == "ssl":
|
elif hdr_name == "X-FORWARDED-PROTOCOL" and hdr_value.lower() == "ssl":
|
||||||
url_scheme = "https"
|
url_scheme = "https"
|
||||||
elif name == "x-forwarded-ssl" and hdr_value.lower() == "on":
|
elif hdr_name == "X-FORWARDED-SSL" and hdr_value.lower() == "on":
|
||||||
url_scheme = "https"
|
url_scheme = "https"
|
||||||
elif name == "host":
|
elif hdr_name == "HOST":
|
||||||
server = hdr_value
|
server = hdr_value
|
||||||
elif name == "script_name":
|
elif hdr_name == "SCRIPT_NAME":
|
||||||
script_name = hdr_value
|
script_name = hdr_value
|
||||||
elif name == "content-type":
|
elif hdr_name == "CONTENT-TYPE":
|
||||||
content_type = hdr_value
|
content_type = hdr_value
|
||||||
elif name == "content-length":
|
elif hdr_name == "CONTENT-LENGTH":
|
||||||
content_length = hdr_value
|
content_length = hdr_value
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
@ -107,7 +106,7 @@ def create(req, sock, client, server, cfg):
|
|||||||
}
|
}
|
||||||
|
|
||||||
for key, value in req.headers:
|
for key, value in req.headers:
|
||||||
key = 'HTTP_' + key.upper().replace('-', '_')
|
key = 'HTTP_' + key.replace('-', '_')
|
||||||
if key not in ('HTTP_CONTENT_TYPE', 'HTTP_CONTENT_LENGTH'):
|
if key not in ('HTTP_CONTENT_TYPE', 'HTTP_CONTENT_LENGTH'):
|
||||||
environ[key] = value
|
environ[key] = value
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user