【问题标题】:Authorization Header appended only once in AJAX CORS request授权标头在 AJAX CORS 请求中仅附加一次
【发布时间】:2015-03-15 09:57:39
【问题描述】:

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

在服务器端,我可以看到第一个调用带有正确评估的“授权”标头,而所有其他呼叫都没有这样的标头。

我错过了什么?

谢谢

cghersi

【问题讨论】:

    标签: javascript jquery ajax cors


    【解决方案1】:

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

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

    2) 符号

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

    不工作。设置标题的唯一方法是:

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

    希望这可以在未来对其他人有所帮助。

    cghersi

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 2014-09-23
      • 2015-04-02
      • 2016-12-28
      相关资源
      最近更新 更多