【发布时间】:2016-09-10 20:48:34
【问题描述】:
我有一个在 nodejs 中使用 Express 开发的 http 服务器。 服务器在 3000 端口本地运行。
提供了一个 html 页面 (index.html),它调用 ajax GET 内容(作为 html 内容类型)。 这些 ajax 内容也在同一个端口、同一个 http 协议中由同一个服务器提供。
在节点服务器应用程序中,我添加了 Cors Same Origin 标头,但是 index.html 在控制台中仍然出现错误:“安全错误:操作不安全”。
在浏览器控制台中,我成功地从节点 Express 应用程序中看到了有关“Access-Control-Allow-Origin”等的标题...
此外,同一个应用程序也在为另一个页面提供服务,并且 index.html 可以成功获取数据而没有任何安全错误。
你还有什么建议吗?
function getData(url, type, CType, id) {
//var xhr = new XMLHttpRequest();
//xhr.open(type, url, true);
//xhr.withCredentials = true;
//xhr.onload = function () {
//console.log(xhr.responseText);
//if(CType == 'text/html') { $(id).append(xhr.responseText); }
//};
//xhr.send();
$.ajax({
url: url,
type: type,
crossDomain:true,
cors:true,
success: function(data){
$(id).append(data);
},
error: function(data) {
console.log('ERROR '+url);
console.log(data);
$(id).append(getError(url));
}
});
getData(location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '')+'/modules/mymodule', 'text/html', 'GET', '#content');
【问题讨论】:
-
看起来这两个请求都是 HTTP 或 HTTPS(不是混合的)。是这样吗?是否涉及任何重定向? (实际上,您似乎正在向 same 源发出请求,为什么只使用相对 URL?)
-
你测试的是什么浏览器?如果您尝试使用不同的浏览器,您会收到不同的(或许更有启发性的)错误消息吗?
-
> 为什么只使用相对 URL?嗯..这是一个很好的问题..而且没有理由...只是相对测试:getData('/modules/mymodule', 'text/html', 'GET', '#content');我得到了同样的结果。
-
最初用 Firefox 44.0.2 和 Chromium 48.0.2564.82 测试给出:“SyntaxError: 无法在 'XMLHttpRequest' 上执行 'open': 'TEXT/HTML' 不是有效的 HTTP 方法。”
标签: javascript jquery ajax node.js cors