REST経由でデータを公開するExpressJSアプリケーションがあります。同じオリジンから、または 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
残念ながら、これを起動して実行するための解決策を見つけることができません。