今天做了关于使用CROS做跨域访问的实验。
具体的配置如下,
有一个在localhost:80的nginx的简单html。调用如下:
$.get('http://localhost:3000/tests').done(function(res){ console.log(res); }).fail(function(jqXHR){ console.log('failed', jqXHR); });
有一个在localhost:3000/tests的nodeJs应用,简单的routes如下:
var express = require('express'); var router = express.Router(); /* GET tests. */ router.get('/', function(req, res) { res.send({'name':'From NodeJs'}); }); module.exports = router;
在本地测试调用时,无法得到相应的数据,chrome会报错如下:
XMLHttpRequest cannot load http://localhost:3000/tests. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
正确的方法是在nodeJs里面加入准许访问的头部,如下:
var express = require('express'); var router = express.Router(); /* GET tests. */ router.get('/', function(req, res) { res.setHeader('Access-Control-Allow-Origin', 'http://localhost'); res.send({'name':'From NodeJs'}); }); module.exports = router;
为了响应更多的CROS请求,需要实现nodeJs中的OPTIONS请求,可以参照stackoverflow中相关的问题。