在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
});
我还尝试将username
和password
添加到ajax选项中,但无济于事。
答案 0 :(得分:4)
似乎第3方服务器配置错误,没有考虑OPTIONS请求。
W3声明预检OPTIONS请求必须:
排除用户凭据。
定义了用户凭据:
出于本规范的目的,术语用户凭证意味着cookie,HTTP身份验证和客户端SSL证书
请参阅https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0
如果服务器在您的控制之下,那么您只需将OPTIONS请求处理程序放在您的身份验证前面。
如果服务器不在您的控制范围内(这似乎就是这种情况),那么您向服务器管理员抱怨说他们做错了并希望他们改变它。