javascript - XMLHttpRequest 和 Web Workers Access-Control-Origin

标签 javascript html xmlhttprequest web-worker

在使用 webworker 发出 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 的 header 中包含 createSimplePage.js,它运行良好并打印来自 twitter API 的正确响应。但是,如果我只加载 main.js 并让它尝试加载 createSimplePage.js 作为网络 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."

我不明白为什么将它作为网络 worker 加载会破坏它,因此它无法访问 API。

最佳答案

我不认为 webworkers 具有与浏览器相同的安全级别。也许您可以确保返回的脚本带有允许所有来源 header :

header("Access-Control-Allow-Origin: *");

可能最好删除您的自定义 header :

xmlhttp.setRequestHeader('Content-Type', 'text/plain');

此站点有更多信息: http://enable-cors.org/

关于javascript - XMLHttpRequest 和 Web Workers Access-Control-Origin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17010200/

相关文章:

javascript - 在 1 个 HTML onclick 事件中使用 JS 和 ASP

javascript - 发送表格后,框显示为红色,但表格已发送。这是我的代码

css - 垂直对齐在 div 中不起作用

html - 验证摘要上方的间距从何而来,如何删除它?

validation - Grooveshark 小部件的 HTML5 验证

javascript - XHR - 绕过过期的 SSL 证书

c# - 两个用户/两个 session 同时从一台 PC 到一个站点?

javascript - 如何识别网页是在 IFRAME 还是 FRAME 内加载

javascript - Microsoft Bot Framework 无需用户与机器人对话即可发送消息

javascript:如何获取网页的内容