在使用webworkers制作XMLHttpRequest时,我正在处理一些Access-Control-Origin问题。
此代码中的问题很容易重现,main.js:
var worker = new Worker('js/createSimplePage.js');
worker.onmessage = function () {
console.log('message recieved');
};
和js / createSimplePage.js:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
console.log(xmlhttp.responseText);
}
};
xmlhttp.open("GET", "http://search.twitter.com/search.json?q=balling&rpp=20&callback=", true);
xmlhttp.setRequestHeader('Content-Type', 'text/plain');
xmlhttp.send();
如果我在index.html的标题中包含createSimplePage.js,它运行正常并从twitter API打印正确的响应。但是,如果我只加载main.js并让它尝试将createSimplePage.js作为Web worker加载,那么我收到错误:
XMLHttpRequest cannot load http://search.twitter.com/search.json?q=balling&rpp=20&callback=.
Origin file:// is not allowed by Access-Control-Allow-Origin.
在SimpleHTTPServer上托管文件时会发生类似的错误,但错误是
"Origin http://127.0.0.1:8000 is not allowed by Access-Countrol-Allow-Origin."
我不明白为什么将它作为网络工作者加载会破坏它以便它无法访问API。
答案 0 :(得分:0)
我不认为网络工作者具有与浏览器相同的安全级别。也许你可以确保返回允许所有起源标题的脚本:
header("Access-Control-Allow-Origin: *");
最好删除自定义标题:
xmlhttp.setRequestHeader('Content-Type', 'text/plain');
此网站有更多信息: http://enable-cors.org/