jQuery.ajax't发送带有OPTIONS请求的Authorization标头

jQuery.ajax doesn't send Authorization header with OPTIONS request

本文关键字:OPTIONS 请求 标头 Authorization ajax jQuery      更新时间:2024-03-08

POST请求(或可能的其他类型)之前发送OPTIONS请求时,jQuery似乎不会沿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请求。

W3规定飞行前OPTIONS请求必须:

排除用户凭据。

定义了用户凭据:

在本规范中,术语用户凭据是指cookie、HTTP身份验证和客户端SSL证书

请参阅https://www.w3.org/TR/cors/#cross-原始请求-带反射灯-0

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

如果服务器不在你的控制范围内,这似乎是这里的情况,那么你会抱怨服务器管理员解释他们做错了,并希望他们改变它。