我有一个 ExpressJS 应用程序通过 REST 公开一些数据。当我从同一来源或使用 curl 访问 REST 接口时,一切都很好,我的自定义 http 标头被转发到我的路由。
但是当我尝试从另一个来源访问 REST 接口时,我的标题被删除了。
expressjs 配置如下所示
app.use(express.bodyParser());
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET');
res.header('Access-Control-Allow-Headers', 'Accept');
if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
};
app.all('/',allowCrossDomain);
app.get('/foo', function(req,res){
console.dir(req.headers);
});
我尝试使用以下 JS 代码访问 api
var properties = {
url: 'http://localhost:3001/foo?callback=?,
type: 'GET',
dataType: 'jsonp',
headers: { "x-foo" : "FooBar"}
};
$.ajax(properties).done(onSuccess).fail(function(r, s, e) {
console.log(e);
});
在服务器端,自定义标头 x-foo 不是 req.headers 的一部分。如果我使用以下 curl 命令,我的标题存在
curl -H "x-foo: FooBar" -G http://localhost:3001/foo
不幸的是,我找不到任何解决方案来启动和运行它。