我正在开发一个应用程序,其中我使用了托管在同一台机器上的两台服务器,其中一台是 apache,它将作为基本主机来服务 php 页面,另一台 Nodejs 用于其余 api 的通信,整个应用程序构建在backbone/marionette/requirejs/ 上引导程序。
说到这里,我的正常页面是从 apache 服务器加载的,例如,
http://192.168.20.62/project/design.php
我已经像这样配置了我的模型,
define(['backbone'],function(Backbone){
'use strict';
return Backbone.Model.extend({
url:"http://192.168.20.62:9847/page",
defaults: {
...
}
});
});
当我尝试保存模型时,我遇到了ajax跨域调用的问题,并且在保存通信中出现错误,以下是节点/express服务器,
var express = require('/root/node_modules/express');
var app = express();
app.configure(function () {
app.use(express.json());
app.use(express.urlencoded());
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://192.168.20.62:9847');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
})
app.post('/page', function(request, response){
console.log(request.body);
response.send(request.body);
});
app.listen(9847);
正如你所看到的,我已经在服务器代码中编写了一些补丁,但仍然相同,我还在两者的根级别添加了 .htaccess
http://192.168.20.62
and
http://192.168.20.62:9847
使用以下代码,
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
但无论如何,事情都没有帮助,如果我通过禁用网络安全来运行 chrome,那么事情就会正常工作。
chrome.exe --禁用网络安全
你们能帮我解决这个难题吗,先谢谢了。
以下是来自 chrome javascript 控制台的错误消息
OPTIONS http://192.168.20.62:9847/page Origin http://192.168.20.62 is not allowed by Access-Control-Allow-Origin. jquery-2.0.3.min.js:6
XMLHttpRequest cannot load http://192.168.20.62:9847/page. Origin http://192.168.20.62 is not allowed by Access-Control-Allow-Origin.