gpt4 book ai didi

ajax - Apache和Nodejs跨域ajax问题

转载 作者:搜寻专家 更新时间:2023-10-31 23:49:00 24 4
gpt4 key购买 nike

我正在开发一个应用程序,其中我使用了在同一台机器上托管的两台服务器,一个是 apache,它将用作服务 php 页面的基本主机,另一端 nodejs 用于 rest api 的通信,整个应用程序构建在主干/Marionette 上/requirejs/bootstrap.

说到这一点,我的正常页面是从 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 跨域调用的问题,我在保存通信时遇到错误,以下是 Node/快速服务器,

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 --禁用网络安全

你们能帮我解决这个难题吗,在此先感谢。

以下是来自 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.

最佳答案

糟糕,我发现了问题,我为白名单设置了错误的 url。

res.setHeader('Access-Control-Allow-Origin', 'http://192.168.20.62');

我必须将生成跨域的源 URL 列入白名单,这是使它运行所需的唯一更改。

这对浏览器版本也有影响,当我发布这个问题时,我正在检查 firefox 版本 24.0.*,当我升级到 25.0 时,它令人惊讶地停止生成跨域错误。但是 Chrome 仍然会出现自然的跨域错误,当我仔细阅读 chrome 的错误消息时,我才知道我已经将错误的 url 列入了白名单。

XMLHttpRequest 无法加载 http://192.168.20.62:9847/page。 'Access-Control-Allow-Origin' 仅将 'http://192.168.20.62:9847' 列入白名单。来源 'http://192.168.20.62' 不在列表中,因此不允许访问。

关于ajax - Apache和Nodejs跨域ajax问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19947948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com