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

Authorization Header appended only once in AJAX CORS request

我在 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);
    }

在服务器端,我可以看到第一个调用带有 'Authorization' Header 的正确值,而所有其他调用都没有这样的 Header.

我错过了什么?

谢谢

cghersi

我解决了我的问题,所以我想把答案告诉其他处于相同情况的人。

1) 问题是启用来自 server-side 的 OPTIONS http 请求。事实上,第一次调用同一个 url 但使用动词 'OPTIONS',然后第二次调用真正的 url 使用 POST|GET 方法。如果服务器没有正确响应第一个 'OPTIONS' 调用,例如指定正确的 Allowed Headers 等,第二次调用不起作用。

2) 表示法

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

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

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

希望这对以后的其他人有所帮助。

cghersi