【问题标题】:jQuery.ajax doesn't send Authorization header with OPTIONS requestjQuery.ajax 不发送带有 OPTIONS 请求的 Authorization 标头
【发布时间】:2015-04-24 09:28:29
【问题描述】:

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

我还尝试在 ajax 选项中添加 usernamepassword,但无济于事。

【问题讨论】:

标签: javascript jquery ajax cors


【解决方案1】:

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

W3 规定预检 OPTIONS 请求必须:

排除用户凭据。

已定义用户凭据:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2019-08-07
    • 2011-10-01
    • 2019-03-08
    • 2016-11-10
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多