tornado 做了一个 Web 程序。使用 IE 访问没有任何问题,使用 chrome 访问其中一个页面会出现下面这个错误
无法访问此网站
连接已重置。 请试试以下办法: 重新加载网页 检查网络连接 检查代理服务器和防火墙 ERR_CONNECTION_RESET
1 、在 chrome 下在这个页面出现错误时,同时用 ie 打开当前页面是可以的,没有任何问题
2 、如果此网页翻墙,仍然没问题,打开正常
3 、我直接输入的 IP ,当前 ip 没有被墙
我访问的这个页面是使用 tornado 做的一个反向代理。
代码大概如下:
def fetch_request(url, callback, **kwargs):
tornado.httpclient.AsyncHTTPClient.configure('tornado.curl_httpclient.CurlAsyncHTTPClient')
req = tornado.httpclient.HTTPRequest(url, **kwargs)
client = tornado.httpclient.AsyncHTTPClient()
client.fetch(req, callback)
class ProxyHandler(BaseHandler):
@tornado.web.asynchronous
def get(self, url):
def handle_response(response):
if (response.error and not
isinstance(response.error, tornado.httpclient.HTTPError)):
self.set_status(500)
self.write('Internal server error:\n' + str(response.error))
else:
self.set_status(response.code, response.reason)
self._headers = tornado.httputil.HTTPHeaders() # clear tornado default header
for header, v in response.headers.get_all():
if header not in ('Content-Length', 'Transfer-Encoding', 'Content-Encoding', 'Connection'):
self.add_header(header, v) # some header appear multiple times, eg 'Set-Cookie'
body = response.body
if body:
# self.set_header('Content-Length', len(body))
self.write(body)
self.finish()
try:
uri = self.request.uri
url = uri.replace("/proxy/", "")
# headers=self.request.headers,
fetch_request(
url, handle_response,
method=self.request.method, follow_redirects=False,
allow_nonstandard_methods=True)
except tornado.httpclient.HTTPError as e:
if hasattr(e, 'response') and e.response:
handle_response(e.response)
else:
self.set_status(500)
self.write('Internal server error:\n' + str(e))
self.finish()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.