授权头在AJAX CORS请求中仅附加一次

时间:2015-01-16 18:01:26

标签: javascript jquery ajax cors

我在CORS场景中从Javascript调用我的RESTful API。

我使用JQuery发送我的POST身份验证请求。 这是一个例子:

function post(settings, addAccessToken) {
        settings.type = 'POST';
        settings.cache = false;
        if (settings.dataType === undefined)
            settings.dataType = 'json';
        if (addAccessToken) {
            settings.xhrFields = { withCredentials: true };
            settings.beforeSend = function (request) {
                request.setRequestHeader('Authorization', 'Bearer <my access token>');
            };
            settings.headers = {
                'Authorization': 'Bearer <my access token>'
            };
        }
        return $.ajax(settings);
    }

在服务器端,我可以看到第一个来电与授权&#39;正确评价标题,而所有其他人都没有这样的标题。

我错过了什么?

谢谢

cghersi

1 个答案:

答案 0 :(得分:2)

我解决了我的问题所以我想给其他人的答案处于同样的情况。

1)问题是从服务器端启用OPTIONS http请求。实际上,第一次调用同一个网址但是使用了动词&#39; OPTIONS&#39;然后使用POST | GET方法第二次调用真实URL。如果服务器没有正确回答第一个选项&#39; OPCES&#39;电话,例如指定正确的允许标题等,第二个调用不起作用。

2)符号

settings.headers = {
 'Authorization': 'Bearer <my access token>'
};

无效。设置标头的唯一方法是:

settings.beforeSend = function (request) {
 request.setRequestHeader('Authorization', 'Bearer <my access token>');
};

希望这可以在将来帮助其他人。

cghersi