我正在尝试从网络工作者中创建一个跨域XMLHttpRequest
。设置如下:
example.com
s3.amazon.com
Access-Control-Allow-Origin
标题代码如下:
var xhr = new XMLHttpRequest();
//this will redirect to 'https://s3.amazon.com/...'
xhr.open('GET', 'https://example.com/document/1234/download');
xhr.send(null);
此代码正确地遵循重定向,无论是从主JS文件调用还是从Web worker调用。
当从主JS文件调用时,此代码正确遵循重定向 。从Web worker调用时,请求将中止而不会显示错误或日志消息。
可以通过编辑浏览器安全设置并启用“跨域访问数据源”来完成这项工作,但期望用户这样做是不可行的。
答案 0 :(得分:1)
尝试在标头请求中设置更多元标记,例如 xhr.setRequestHeader('Access-Control-Allow-Origin',example.com); //从哪个请求
selected text
有关详细信息,请查看此链接 - https://www.html5rocks.com/en/tutorials/cors/
答案 1 :(得分:1)
这个问题有几种可能的解决方法,我探讨过其中两种:
function callXHR() {
var xhr = new XMLHttpRequest();
//this will redirect to 'https://s3.amazon.com/...'
xhr.open('GET', 'https://example.com/document/1234/download');
xhr.send(null);
}
if(isIE) {
//callXHR in main js file
} else {
//callXHR in web worker
}
//from a web worker
if(isIE) {
//give the exact url so the xhr doesn't get a 302
callXHR('https://s3.amazon.com/...');
} else {
//this will follow the redirect to https://aws...
callXHR('https://example.com/document/1234/download');
}
我决定使用选项2,因为我不想放弃网络工作者。
此处提供的答案主要关注CORS或重定向,但实际上没有一个解决我遇到的具体问题。