慢速预测Chrome中的OPTIONS请求

时间:2018-01-11 12:22:57

标签: javascript angularjs node.js google-chrome cors

我正在努力应对一个奇怪的问题,这只会发生在Chrome中。

我的角度SPA与另一个子域(api.domain.com)上的node.js-Backend进行通信。为了实现这一点,我使用了the cors npm package。除了Chrome中OPTIONS预检的下载时间外,一切正常。

Screenshot of OPTIONS slower than PUT
The timing tab shows that most time is spent by downloading content, but there is no Content-Body in my response.

此时间仅发生在Chrome中。 Firefox,IE,Edge和Opera不受影响。

我在docker容器中使用带有express和cors的node.js。前端是一个有角度的1 SPA。

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果您正在使用快递,您可以尝试这个黑客并编写一个中间件功能与您的所有CORS东西,检查请求是否是预检,然后返回200.希望这可以为您修复它。但是,我再也不会使用这种依赖关系而且它很奇怪,它只发生在chrome中。

app.use(function(req, res, next) {    //CORS
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.setHeader("Access-Control-Allow-Headers", "Origin, x-access-token, X-Requested-With, Content-Type, Accept");
    if ('OPTIONS' == req.method) {
        res.send(200);
    }
    else {
        next();
    }
});

答案 1 :(得分:0)

我一直在寻求对此进行调试,但由于我们遇到了同样的问题,它似乎确实是一个Chrome错误。

作为参考,我在这里向铬提交了一份错误报告:enter image description here

我在这里添加这个以帮助阻止更多开发人员花费半天时间来调查它;)将更新我们在这里更多来自Chromium。

错误报告概述如下:

UserAgent:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

重现问题的步骤:

  1. 有app.domain.com
  2. 列表项
  3. 有api.domain.com
  4. 在API上启用CORS以启用访问
  5. 检查DevTools中的响应,请参阅OPTIONS和GET请求最多需要300ms +
  6. 预期的行为是什么?

    响应时间应该准确。

    出了什么问题?

    我们正在使用Go微服务,并注意到浏览器之间的时间差异很大 - 铬是最慢的,达到100倍。

    当我们检查后端的时间时,响应最多需要10毫秒,大多数是1毫秒。在检查devtools下的时序时,相同的响应在~100ms~1s时出现。

    之前有效吗?

    不适用

    Chrome版本:63.0.3239.132频道:稳定 操作系统版本:10.0 Flash版本:

    在Firefox(以及任何其他浏览器)中,完全相同的请求按预期返回~1-20ms。

    在尝试进一步诊断时,我们使用Telerik的Fiddler检查实际的网络响应时间,并确认Chrome在我们预期的时间内发送和接收。我们可以得出的唯一结论是,Chrome内部的某些内容正在减慢这些请求的处理速度。

    我们尝试了chrome://flags#out-of-blink-corschrome://flags#enable-site-per-process的所有排列,这是我们发现的两个似乎含糊不清的选项。似乎没有任何帮助。

    我们还发现了很多关于类似问题的Stack Overflow文章,提到它是一个Chrome错误,但我还没有找到它在这里报道:

    我们刚刚在MacOS上测试了Chrome,但它似乎不是问题所在 - 因此可能仅限于Windows。

    铬: Slow cors preflight OPTIONS Request in Chrome optionsChrome

    边: getChrome optionsEdge

    火狐: getEdge optionsFirefox