jQuery.ajax不会在OPTIONS请求中发送Authorization标头

8

看起来当jQuery发送一个POST请求(或者可能是其他类型的请求)之前,它不会发送Authorization头部信息。我试图访问的服务器对于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添加到ajax选项中,但没有成功。


似乎使服务器在OPTIONS请求上不需要身份验证是解决它的唯一方法。 - suish
我不“拥有”服务器。它是第三方网络服务。 - Josh M.
1个回答

5
看起来第三方服务器没有考虑OPTIONS请求而配置不当。
W3规定预检请求必须:
排除用户凭据。
用户凭据的定义为:
此规范中的用户凭据一词指Cookie、HTTP身份验证和客户端SSL证书。
请参阅 https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0 如果服务器在您的控制下,则只需将OPTIONS请求处理程序放在您的身份验证检查之前。
如果服务器不在您的控制下,似乎在这种情况下是这样的,那么您需要向服务器管理员抱怨,解释他们做错了,并希望他们改变。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接