我正在开发使用托管在同一台机器上的两台服务器的应用程序,一个是 apache,它将作为基本主机来提供 php 页面,另一端 nodejs 用于通信 rest api,整个应用程序建立在骨干/木偶/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 跨域调用问题,并且我的保存通信出现错误,以下是节点/快递服务器,
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
和
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 --disable-web-security
各位大神能帮我解一下这个谜题吗,先谢谢了。
以下是来自 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.