我正在寻找一种方法来允许浏览器托管的 JS 应用程序向运行在不同端口上的服务器发出请求,并且可能与最初为 JS 应用程序提供服务的机器不同。
我正在从我的 Mac OS X Apache Web 服务器提供一个简单的 JavaScript (HTML5) 应用程序。我希望能够在 Windows、Android 和 OS X 的尽可能多的浏览器中运行这个应用程序。但我会满足于每个浏览器。
我的 JavaScript 应用程序使用 XMLHttpRequest 向返回 JSON 的最小自定义服务器发出请求。
因此,例如,我的 JS 应用程序可以在http://10.0.1.3/poc/dashboard.html
我的自定义服务器在同一台机器上运行,监听端口 49379 ......这样的请求http://10.0.1.3:49379/find?name=Fred
将返回一组元组,其中 'name' 等于 'Fred'。
如果我将此请求直接输入到导航工具栏中,那么我会得到想要的结果。
如果我在 JS 中提出相同的请求,我会收到一些错误。
var theXHR = new XMLHttpRequest();
theXHR.onreadystatechange = onReadyStateHandler;
theXHR.open("GET", "http://" + ipAddress + ":49379/find?name=Fred", true);
theXHR.setRequestHeader("User-Agent", "XMLHTTP/1.0");
theXHR.send(null);
我得到这两个错误:
拒绝设置不安全的标头“User-Agent”
XMLHttpRequest 无法加载
http://10.0.1.3:49379/find?name=Fred
。Access-Control-Allow- Originhttp://10.0.1.3
不允许 Origin。
我可以控制 Apache 服务器、JavaScript 和自定义服务器。这只是一个概念证明,将在孤立的网络上进行演示。所以,我不关心安全问题。
另外,我在 Chrome、Firefox、Safari 中运行。所有这些似乎都使用 XMLHttpRequest2 对象。