带有 jquery.ajax() 的跨域“授权”标头

IT技术 javascript jquery ajax cross-domain
2021-03-07 08:51:43

我正在尝试发送跨域域并添加自定义“授权”标头。请看下面的代码。

错误:

XMLHttpRequest 无法加载 {url}。Access-Control-Allow-Headers 不允许请求头字段授权。

function loadJson(from, to) {
    $.ajax({
        //this is a 'cross-origin' domain
        url : "http://localhost:2180/api/index.php",
        dataType : 'json',
        data : { handler : "statistic", from : from, to : to
        },
        beforeSend : setHeader,
        success : function(data) {
            alert("success");
        },
        error : function(jqXHR, textStatus, errorThrown) {
            alert("error");
        }
    });
}

function getToken() {
    var cookie = Cookie.getCookie(cookieName);
    var auth = jQuery.parseJSON(cookie);
    var token = "Token " + auth.id + ":" + auth.key;
}

function setHeader(xhr) {
    xhr.setRequestHeader('Authorization', getToken());
}

我也试过:

headers : { 'Authorization' : getToken() },

在ajax请求中。

会不会是jquery-ajax 框架阻塞了跨域认证?我怎样才能解决这个问题?

更新:

顺便说一句:是否有更安全的方法将 auth.key 存储在客户端然后存储在 cookie 中?getToken() 将替换为更复杂的方法,散列正文、日期等。

1个回答

这是发出 CORS 请求的示例。如果您有权访问服务器(我假设您可以访问,因为这是对本地主机的请求),您将需要添加 CORS 特定的响应标头。最简单的做法是添加以下响应头:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization

您的服务器还需要配置为响应 HTTP OPTIONS 请求。您可以在此处了解有关发出 CORS 请求的更多信息:http : //www.html5rocks.com/en/tutorials/cors/

根据 MDN,当使用凭证请求而不是通配符时,需要将 Access-Control-Allow-Origin 标头设置为原点。
2021-04-20 08:51:43
@radicalmatt,是的,他也在那里写过 stackoverflow.com/a/15254158/632951*当 Access-Control-Allow-Credentials 为 true 时,该值不能用于 Access-Control-Allow-Origin 标头”
2021-04-20 08:51:43
嗯.. 我忘记了这三个标题中的最后一个。我只是发送起源和方法。愚蠢的错误。:) 是的,我实施了 OPTIONS。好链接!谢谢
2021-05-10 08:51:43