javascript - CORS 请求重定向失败

标签 javascript redirect cors box preflight

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

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” header 。

谢谢

最佳答案

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

关于javascript - CORS 请求重定向失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39878142/

相关文章:

ajax - CORS - 对于返回 401 的 API 请求,Ajax 错误函数将错误代码报告为 0

javascript - rails : where to enable Access-Control-Allow-Origin

javascript - 已部署 - 通过 AngularJS CORS 检索的数据

javascript - while循环如何在没有条件的情况下工作?

http - 如何将文件提供给telnet

javascript - 使用 jQuery 删除更新总数据的表行

.htaccess - 将 IP 重定向或指向另一台服务器

php - 用于匹配 WP 重定向插件中不以字符串开头的 URL 的正则表达式

javascript - 遍历页面上的所有 <div> 标签

javascript - 如何从 Firebase 对象中获取值