jQuery.ajax不会发送带有OPTIONS请求的Authorization标头

时间:2015-02-23 05:17:52

标签: javascript jquery ajax cors

Authorization请求(或可能是其他类型)之前发送OPTIONS请求时,jQuery似乎不会发送POST标头。我尝试访问的服务器返回OPTIONS请求的401状态 - 即使在此初始请求中,如何强制jQuery包含Authorization标头?

$.ajax({
    type: "POST",
    url: url,
    data: postData,
    beforeSend: function ajaxBeforeSend(jqXHR) {
        jqXHR.withCredentials = true;
        jqXHR.setRequestHeader("Authorization", "Basic " + btoa(encodeURIComponent(escape($username.val())) + ":" + encodeURIComponent(escape($password.val()))));
    },
    success: runReportUrlCallback,
    error: runReportErrorCallback
});

我还尝试将usernamepassword添加到a​​jax选项中,但无济于事。

1 个答案:

答案 0 :(得分:4)

似乎第3方服务器配置错误,没有考虑OPTIONS请求。

W3声明预检OPTIONS请求必须:

  

排除用户凭据。

定义了用户凭据:

  

出于本规范的目的,术语用户凭证意味着cookie,HTTP身份验证和客户端SSL证书

请参阅https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0

如果服务器在您的控制之下,那么您只需将OPTIONS请求处理程序放在您的身份验证前面。

如果服务器不在您的控制范围内(这似乎就是这种情况),那么您向服务器管理员抱怨说他们做错了并希望他们改变它。