在Chrome浏览器访问网站后,Flask不处理其他HTTP请求

问题描述 投票:3回答:1

问题陈述:在我尝试从Chrome浏览器访问非现有文件后,Flask上的我的Web服务器没有处理HTTP请求。当Chrome关闭或访问确实存在的页面时,会立即处理积压的HTTP请求。

影响:Web服务器可用性很差。

问题:为什么它会发生以及如何在不以线程模式运行Flask的情况下修复它?

我在网上找到的最近的帖子是:github.com/pallets/flask/issues/2188但找不到完全相同的问题和解决方案。期待您的想法 - 非常感谢您的帮助!

主要假设:Chrome没有读取404响应的所有内容,Flask正在等待读取所有内容

细节:

重现问题的步骤:

1)运行最小的Flask应用程序(http://flask.pocoo.org/docs/0.12/quickstart/):

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

app.run()    
  • 在хттп://127.0.0.1:5000 /上运行(按CTRL + C退出)

2)验证您在浏览器或卷曲中获得“Hello world”响应:

curl -v localhost:5000 /

3)在Chrome中转到localhost:5000 / pagethatdoesnotexists在浏览器中观察Not Found错误

4)重复curl -v localhost:5000 /命令

观察到已建立连接但未收到响应,例如:

curl -v localhost:5000 / *尝试:: 1 ... *连接失败*连接到:: 1端口5000失败:连接被拒绝*尝试127.0.0.1 ... *连接到localhost(127.0.0.1)端口5000( #0)

GET / HTTP / 1.1主机:localhost:5000 User-Agent:curl / 7.49.0接受:/

5)在Chrome中转到存在的页面或关闭Chrome

观察对卷曲的即时反应:

  • HTTP 1.0,假设在body <HTTP / 1.0 200 OK之后关闭<Content-Type:text / html; charset = utf-8 <内容长度:13 <服务器:Werkzeug / 0.11.10 Python / 3.5.1 <日期:星期二,2017年2月28日21:44:20 GMT <
  • 关闭连接0你好,世界!

重现问题可能需要多次尝试。通常在10次中发生> 8次

其他信息:

1)而不是curl我可以使用Safari或telnet或python脚本 - 同样的问题

2)Safari不会产生Chrome的问题

3)尝试通过发送与Chrome完全相同的http请求来模仿Chrome - 但无法重现问题。 Chrome可能会做其他事情。

4)当我以线程模式运行Flask(使用不同的线程处理每个请求)时,问题就消失了。

5)版本:

Chrome版本56.0.2924.87(64位)

Python 3.5.2 | Anaconda 4.1.1(64位)| (默认,2016年7月2日,17:53:06)[GCC 4.4.7 20120313(Red Hat 4.4.7-1)]在linux上

flask.version'0.11.1'

6)问题也在AWS Ubuntu生产服务器机器上重现

7)尝试在404 http响应中发送自定义标头但没有运气

@app.errorhandler(404)
def page_not_found(e):
    # return render_template('404.html'), 404
    resp = make_response(render_template('404.html'), 404)
    # resp.headers['Connection'] = 'close'
    resp.headers['Cache-Control'] = 'no-cache, no-store'
    return resp

UPDATE

我能够在没有404错误的情况下重现问题,只需使用来自Chrome的正常http请求即可。观察到Flask日志中没有错误。

这是video with the problem demonstration

另一个有趣的事情 - 如果在Chrome浏览器中使用隐身窗口,则不会出现问题。然而,在正常模式下清除缓存Chrome并不能解决问题。

python google-chrome http flask
1个回答
1
投票

我遇到了两次同样的问题。

相同的环境:纯Flask(无反向代理),最简单的应用程序。

在您使用Chrome / Chromium打开网址后 - Flask将挂起并且不会响应其他客户端(curl,postman,firefox,python-request,..)。

Chrome的解决方法

禁用Chrome / Chromium中的网址预测服务(截图的实际名称在屏幕截图中)

chromium-settings

真正的解决方案(适用于Flask)

即将推出(欢迎捐款!)。

© www.soinside.com 2019 - 2024. All rights reserved.