mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
speed remote and server address parsing
This commit is contained in:
parent
56e1d90ab6
commit
ba8174626e
@ -73,57 +73,35 @@ class Request(object):
|
|||||||
else:
|
else:
|
||||||
wsgi_input = TeeInput(self.socket, self.parser, buf[i:])
|
wsgi_input = TeeInput(self.socket, self.parser, buf[i:])
|
||||||
|
|
||||||
|
# This value should evaluate true if an equivalent application
|
||||||
if self.debug:
|
# object may be simultaneously invoked by another process, and
|
||||||
# This value should evaluate true if an equivalent application
|
# should evaluate false otherwise. In debug mode we fall to one
|
||||||
# object may be simultaneously invoked by another process, and
|
# worker so we comply to pylons and other paster app.
|
||||||
# should evaluate false otherwise. In debug mode we fall to one
|
wsgi_multiprocess = (self.debug == True)
|
||||||
# worker so we comply to pylons and other paster app.
|
|
||||||
wsgi_multiprocess = False
|
|
||||||
else:
|
|
||||||
wsgi_multiprocess = True
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# authors should be aware that REMOTE_HOST and REMOTE_ADDR
|
# authors should be aware that REMOTE_HOST and REMOTE_ADDR
|
||||||
# may not qualify the remote addr:
|
# may not qualify the remote addr:
|
||||||
# http://www.ietf.org/rfc/rfc3875
|
# http://www.ietf.org/rfc/rfc3875
|
||||||
try:
|
client_address = self.client_address or "127.0.0.1"
|
||||||
if 'X-Forwarded-For' in self.parser.headers_dict:
|
forward_adress = self.parser.headers_dict.get('X-Forwarded-For', client_address)
|
||||||
forward_adress = self.parser.headers_dict.get('X-Forwarded-For')
|
|
||||||
|
|
||||||
# we only took the last one
|
|
||||||
# http://en.wikipedia.org/wiki/X-Forwarded-For
|
|
||||||
if "," in forward_adress:
|
|
||||||
forward_adress = forward_adress.split(",")[-1].strip()
|
|
||||||
|
|
||||||
if ":" in forward_adress:
|
|
||||||
remote_addr, remote_port = forward_adress.split(':')
|
|
||||||
else:
|
|
||||||
remote_addr, remote_port = (forward_adress, '')
|
|
||||||
elif self.client_address is not None:
|
|
||||||
remote_addr, remote_port = self.client_address
|
|
||||||
else:
|
|
||||||
remote_addr, remote_port = ('127.0.0.1', '')
|
|
||||||
except:
|
|
||||||
remote_addr, remote_port = ('127.0.0.1', '')
|
|
||||||
|
|
||||||
|
if isinstance(forward_adress, basestring):
|
||||||
|
# we only took the last one
|
||||||
|
# http://en.wikipedia.org/wiki/X-Forwarded-For
|
||||||
|
if "," in forward_adress:
|
||||||
|
forward_adress = forward_adress.split(",")[-1].strip()
|
||||||
|
remote_addr = forward_adress.split(":")
|
||||||
|
if len(remote_addr) == 1:
|
||||||
|
remote_addr.append('')
|
||||||
|
else:
|
||||||
|
remote_addr = forward_adress
|
||||||
|
|
||||||
# Try to server address from headers
|
# Try to server address from headers
|
||||||
if 'Host' in self.parser.headers_dict:
|
server_address = self.parser.headers_dict.get('Host', self.server_address)
|
||||||
server_address = self.parser.headers_dict.get('Host')
|
|
||||||
else:
|
|
||||||
server_address = self.server_address
|
|
||||||
|
|
||||||
if isinstance(server_address, basestring):
|
if isinstance(server_address, basestring):
|
||||||
if ':' in server_address:
|
server_address = server_address.split(":")
|
||||||
server_name, server_port = server_address.split(":")
|
if len(server_address) == 1:
|
||||||
else:
|
server_address.append('')
|
||||||
server_name = server_address
|
|
||||||
server_port = ''
|
|
||||||
else:
|
|
||||||
server_name, server_port = server_address
|
|
||||||
|
|
||||||
environ = {
|
environ = {
|
||||||
"wsgi.url_scheme": 'http',
|
"wsgi.url_scheme": 'http',
|
||||||
@ -141,10 +119,10 @@ class Request(object):
|
|||||||
"RAW_URI": self.parser.raw_path,
|
"RAW_URI": self.parser.raw_path,
|
||||||
"CONTENT_TYPE": self.parser.headers_dict.get('Content-Type', ''),
|
"CONTENT_TYPE": self.parser.headers_dict.get('Content-Type', ''),
|
||||||
"CONTENT_LENGTH": str(wsgi_input.len),
|
"CONTENT_LENGTH": str(wsgi_input.len),
|
||||||
"REMOTE_ADDR": remote_addr,
|
"REMOTE_ADDR": remote_addr[0],
|
||||||
"REMOTE_PORT": remote_port,
|
"REMOTE_PORT": remote_addr[1],
|
||||||
"SERVER_NAME": server_name,
|
"SERVER_NAME": server_address[0],
|
||||||
"SERVER_PORT": server_port,
|
"SERVER_PORT": server_address[1],
|
||||||
"SERVER_PROTOCOL": self.parser.raw_version
|
"SERVER_PROTOCOL": self.parser.raw_version
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user