目前正在开发elasticsearch API应用程序,我需要从服务器端的AJAX调用中获取头请求。下面给出了Ajax请求。
$.ajax({
url: 'http://localhost:3002/api/v1/getAutoSuggest/'+elasticsearchIndex+'/'+elasticsearchType,
dataType: 'JSONP',
type: 'GET',
beforeSend: function(xhr){xhr.setRequestHeader('access-control-request-headers', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9');},
success: function (data) {
}
});
在nodejs中,我试图使用 req.headers [' x-access-token'] ,但无法获得它。
var checkToken = app.use(function(req, res, next) {
var token = req.param.token || req.headers['x-access-token'];
if (token) {
jwt.verify(token, config.secret, function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
} else {
req.decoded = decoded;
next();
}
});
} else {
}
});
我还在nodejs服务器端添加了以下语句。
var allowedOrigins = ['http://127.0.0.1:8000', 'http://localhost:8000', 'http://127.0.0.1:9000', 'http://localhost:9000'];
var origin = req.headers.origin;
if(allowedOrigins.indexOf(origin) > -1){
res.setHeader('Access-Control-Allow-Origin', origin);
}
res.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
res.header('Access-Control-Allow-Headers', 'access-control-request-headers');
res.header('Access-Control-Expose-Headers', '*');
res.header('Access-Control-Allow-Credentials', true);
但是以小写eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9
获取令牌。
提前致谢!
答案 0 :(得分:1)
使用JSONP
时无法设置标题。原因是当使用JSONP
进行跨域请求时,jquery通过向DOM中注入特殊的<script>
标记来实现此目的,以便加载远程资源。如您所知,使用<script>
代码时,您无法指定自定义标头。
JSONP
的另一种方法是使用CORS
。服务器需要支持它并明确允许需要设置的起源和标题。