我正在努力应对一个奇怪的问题,这只会发生在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。
有谁知道如何解决这个问题?
答案 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错误。
我在这里添加这个以帮助阻止更多开发人员花费半天时间来调查它;)将更新我们在这里更多来自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
重现问题的步骤:
预期的行为是什么?
响应时间应该准确。
出了什么问题?
我们正在使用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-cors
和chrome://flags#enable-site-per-process
的所有排列,这是我们发现的两个似乎含糊不清的选项。似乎没有任何帮助。
我们还发现了很多关于类似问题的Stack Overflow文章,提到它是一个Chrome错误,但我还没有找到它在这里报道:
我们刚刚在MacOS上测试了Chrome,但它似乎不是问题所在 - 因此可能仅限于Windows。