AngularJS $ http.get()在Chrome中最多需要10-20秒,在Firefox中运行良好

Bus*_*ata 6 javascript google-chrome cors flask angularjs

我在使用AngularJS/Google Chrome时遇到了一个奇怪的错误.当我执行$ http.get()时,它实际完成之前需要18秒.似乎对"OPTIONS"方法保持"PENDING":

http://i.imgur.com/yEozFdm.png

为这些页面提供服务的服务器是Mongoose,其中@ localhost:5000是Flask,它返回以下头文件以便CORS正常工作.

@mod.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', 'http://localhost:8080')
    response.headers.add('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
    response.headers.add('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type,     Accept')
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么Chrome会推迟OPTIONS请求?(从烧瓶服务器调试控制台,似乎OPTIONS方法实际上只在页面重新加载后10-20秒到达).它似乎在Firefox中运行良好.

Bus*_*ata 4

一旦我禁用“预测网络操作以提高页面加载性能”选项,问题似乎就得到了解决。很奇怪,也许我应该保留这个问题,以便有人能给出可能的原因?

编辑:原因见评论!

  • 这是由 Flask 开发服务器在单个线程上串行处理请求引起的。Chrome 的预测优化会并行打开多个连接,并且 Flask 服务器在等待其中某些连接上的数据时会超时(即使没有发送数据)。最简单的解决方案是使用像 Tornado 这样的生产 Web 服务器。请参阅此[解决方案](/sf/ask/1654754881/#25835028) (3认同)