CORS请求重定向失败

时间:2016-10-05 15:30:25

标签: javascript redirect cors box preflight

我正在尝试使用Box API在客户端Javascript中下载文件,它会在找到文件后将请求重定向到临时下载链接。但浏览器阻止了重定向,引发了以下错误:

XMLHttpRequest无法加载https://api.box.com/2.0/files/file-id/content。该请求已重定向到“https://dl.boxcloud.com/d/1/some-big-hash/download”,对于需要预检的跨源请求,该请求不被允许。

在网络控制台中,我看到三个请求,第一个是OPTIONS(必须是在飞行前,因为实际代码发送GET)有200个响应,而后两个是相同的GET请求,它们都得到302 'd(该API调用的预期响应)。这是发出请求的代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.setRequestHeader('Authorization', 'Bearer '+MyToken);
xhr.onload = function()
{
    //some stuff
}
xhr.onerror = function()
{
    //some other stuff
}
xhr.send();

我的问题是(a):为什么在预检回来后发送了两个GET? 并且(b):有什么方法可以格式化请求以允许遵循重定向?并且(c)如果没有,我是否可以至少从响应中检索重定向URL并使用另一个显式请求跟随它?控制台中的每个响应都使用正确的原点设置了“Access-Control-Allow-Origin”标题。

由于

1 个答案:

答案 0 :(得分:1)

我不明白你为什么得到三个而不是两个请求,但到目前为止CORS的工作方式是无法重定向带有预检的请求。这在Fetch Standard中已经发生了变化,但用户代理尚未获得更改。