【发布时间】:2017-02-14 03:28:52
【问题描述】:
我正在尝试使用 Box API 下载客户端 Javascript 中的文件,一旦找到文件,它将请求重定向到临时下载链接。但是,浏览器阻止了重定向,引发以下错误:
XMLHttpRequest 无法加载 https://api.box.com/2.0/files/file-id/content。请求被重定向到“https://dl.boxcloud.com/d/1/some-big-hash/download”,这对于需要预检的跨域请求是不允许的。
在网络控制台中,我看到三个请求,第一个是带有 200 响应的 OPTIONS(它必须是飞行前的,因为实际代码发送一个 GET),第二个是相同的 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”标头。
谢谢
【问题讨论】:
-
second two are identical GET requests- 一切都一样? -
@Maximus 请求/响应标头是相同的,我能看到的唯一区别是 Chrome 网络控制台的“启动器”列;一个说“api.box.com/2.0/files/file_id/content”(初始请求发送到的 URL),另一个说“Other”
-
和url一样吗?
-
是的(不要介意这需要达到最小字符限制)
标签: javascript redirect cors box preflight