tornado 产生的很奇怪的问题,只在 chrome 下产生,无法访问此网站

2016-08-03 16:09:07 +08:00
 sbmzhcn

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()
346 次点击
所在节点    Python
3 条回复
sbmzhcn
2016-08-03 22:02:28 +08:00
初步判断是 https 的关系,仍需排查。。。
gulu
2016-08-04 00:46:15 +08:00
你是不是在做本地调试并且 chrome 开启了代理?
sbmzhcn
2016-08-04 09:51:54 +08:00
@gulu 和代理没关系,我关了代理,一样出这问题,已经排查过。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296853

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX