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:
benoitc 2010-08-11 11:12:10 +02:00
parent e8bc2cdae8
commit 42d97c3815
2 changed files with 21 additions and 18 deletions

View File

@ -62,18 +62,20 @@ class Message(object):
def set_body_reader(self):
chunked = False
clength = None
for (name, value) in self.headers:
if name.upper() == "CONTENT-LENGTH":
if name == "CONTENT-LENGTH":
try:
clength = int(value)
except ValueError:
clength = None
elif name.upper() == "TRANSFER-ENCODING":
elif name == "TRANSFER-ENCODING":
chunked = value.lower() == "chunked"
elif name.upper() == "SEC-WEBSOCKET-KEY1":
elif name == "SEC-WEBSOCKET-KEY1":
clength = 8
if clength is not None or chunked:
break
if chunked:
self.body = Body(ChunkedReader(self, self.unreader))
elif clength is not None:
@ -83,11 +85,13 @@ class Message(object):
def should_close(self):
for (h, v) in self.headers:
if h.lower() == "connection":
if v.lower().strip() == "close":
if h == "CONNECTION":
v = v.lower().strip()
if v == "close":
return True
elif v.lower().strip() == "keep-alive":
elif v == "keep-alive":
return False
break
return self.version <= (1, 0)

View File

@ -32,24 +32,23 @@ def create(req, sock, client, server, cfg):
content_type = ""
content_length = ""
for hdr_name, hdr_value in req.headers:
name = hdr_name.lower()
if name == "expect":
if hdr_name == "EXPECT":
# handle expect
if hdr_value.lower() == "100-continue":
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
elif name == "x-forwarded-protocol" and hdr_value.lower() == "ssl":
elif hdr_name == "X-FORWARDED-PROTOCOL" and hdr_value.lower() == "ssl":
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"
elif name == "host":
elif hdr_name == "HOST":
server = hdr_value
elif name == "script_name":
elif hdr_name == "SCRIPT_NAME":
script_name = hdr_value
elif name == "content-type":
elif hdr_name == "CONTENT-TYPE":
content_type = hdr_value
elif name == "content-length":
elif hdr_name == "CONTENT-LENGTH":
content_length = hdr_value
else:
continue
@ -107,7 +106,7 @@ def create(req, sock, client, server, cfg):
}
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'):
environ[key] = value