【发布时间】:2014-02-12 11:40:19
【问题描述】:
对于许多新手来说,这个问题可能不是一个新问题。我是其中之一,我必须在客户端处理这个问题。所以,请不要将此问题标记为重复。
我的网站客户端代码部署在服务器中,该网站调用部署在其他不同服务器中的 Web 服务。 (请注意:我没有此网络服务代码访问权限)。
我的 AJAX 代码来检索数据:
$.ajax({
type: 'GET',
url: 'http://webservice_url',
success: function (data) {
//success
},
failure: function(error){
//error
}
});
通过 AJAX 访问此网络服务时,我收到:
XMLHttpRequest cannot load http://webservice_url. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
浏览器控制台日志:
- 我可以在浏览器控制台中成功查看我的 Web 服务的响应(在我的 Web 服务的“网络”选项卡 ->“响应”选项卡下)。但是,正在检索上述错误。
在查看之前的许多帖子时,我发现通过将响应标头设置为:
response.addHeader("Access-Control-Allow-Origin", "*");
将解决此问题。
但是,我无权更改我的网络服务代码以添加响应标头。我必须在网站上解决这个问题。
我使用 ExpressJS 和 Node.js 开发了这个网站。我的应用代码是
var http = require('http');
var routes = require('./routes');
var express = require('express');
var path = require('path');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.cookieParser('secret code'));
app.use(express.logger('dev'));
app.use(express.favicon());
app.use(express.methodOverride());
app.use(express.session());
app.use(express.bodyParser());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// Add headers
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Pass to next layer of middleware
next();
});
app.get('/', routes.index);
http.createServer(app).listen(3000, function(){
console.log('Express server started successfully');
});
添加 res.setHeader('Access-Control-Allow-Origin', '*') 对我没有帮助。
谁能指导我。
【问题讨论】:
-
如果您无法访问 Web 服务,那么您显然无法更改它生成的响应标头——因此您无法使用跨域 AJAX。如果他们提供其他请求数据的方法,请查看他们的文档,例如JSONP。
标签: ajax node.js express same-origin-policy