为什么我在Firefox上的跨站点OPTIONS请求需要这么多时间?

时间:2017-02-15 09:29:33

标签: javascript ajax firefox cookies cors

我在Firefox(51.0.1)上遇到了导致我请求的奇怪行为 需要5秒钟才能完成。这在Chrome或Safari中不会发生。

首先背景

在我使用的Web应用程序中,用户必须登录特定服务 (假设它在foo.bar.com上运行)。身份验证服务器响应 使用域SET-COOKIE的{​​{1}}标头,以便使用每个子域 .bar.com可以使用此身份验证令牌。

执行身份验证请求的javascript代码如下所示:

.bar.com

```

实际错误

由于跨域Cookie,我必须设置 const request = new XMLHttpRequest(); request.withCredentials = true; request.open('POST', 'http://foo.bar.com/login'); request.setRequestHeader('Content-type', 'application/json') request.onload = (evt) => { doSomeStuff(); } request.send(JSON.stringify({ username: 'foo', password: 'bar' }); , 这是(bug |特征)发生的地方:预检OPTIONS请求 5秒实现。以下POST请求正常执行。 Firefox的检查员告诉我,请求卡在request.withcredentials = true状态 大约5秒钟(在我的测试中在4600ms和5000ms之间)。这需要 同一时间在不同的机器上。而且,这只发生在请求时 单击“登录”按钮时发出(当我重播相同的请求时) 通过“在检查器中编辑和重新发送功能”,执行请求 在18ms)。

我在MDN文档中没有找到任何相关内容 (这让我想到了一个错误)。

现在有人为什么浏览器会像这样?或者如果我正在做某事 错了?

0 个答案:

没有答案