CORS - Ajax或XMLHttpRequest类型GET with" Authorization"得到错误307

时间:2017-10-28 18:50:02

标签: javascript ajax xmlhttprequest cors authorization

我需要使用"授权"进行CORS请求类型GET。在标题但由于某种原因它没有工作......我得到307内部重定向错误"预检的响应无效(重定向)"或者,如果使用HTTPS,我会获得401 Unauthorized。

我试过了:

$.ajax({
     url: "http://exemple.com/api/ajax.php",
     type: "GET",
       withCredentials: true, 
       crossDomain: true,
       dataType: 'jsonp',
       beforeSend: function(xhr){xhr.setRequestHeader('Authorization', 'Bearer A5MjE2DA1LCJzaWduIjoiZGJYTExNjM==');},
       success: function() { 
       alert('Success!' + xhr.responseText);}
  });

而且:

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://exemple.com/api/ajax.php", true);
xhr.setRequestHeader("Authorization", "Bearer A5MjE2DA1LCJzaWduIjoiZGJYTExNjM==");
xhr.onload = function () {
    console.log(xhr.responseText);
};
xhr.send();

收到错误307内部重定向错误"预检的响应无效(重定向)"

然后服务器端看起来好("Access-Control-Allow-Origin: *");所以有什么问题?怎么做?

3 个答案:

答案 0 :(得分:0)

您的请求未通过CORS预检检查。使用307重定向,服务器不响应预检OPTIONS请求并重定向。

您需要配置服务器以正确实施CORS。有很多图书馆可以做到这一点。但如果你知道如何,你可以手动完成。

服务器需要响应OPTIONS谓词并使用CORS标头进行回复。在预检中,允许来源必须是绝对的,不允许使用外卡。对于allow-methods返回GET。对于allow-headers返回授权。如果您使用凭据(cookie),请将Allow-Credentials设置为True。

您的预检标题应如下所示:

Cross-Origin-Allow-Origin: http://example.com
Cross-Origin-Allow-Methods: GET
Cross-Origin-Allow-Headers: Authorization
Cross-Origin-Allow-Credentials: True

答案 1 :(得分:0)

Cross-Origin-Allow-Credentials:True 防止 Cross-Origin-Allow-Origin:*

您必须提供确切的来源

答案 2 :(得分:-1)

我的标题是这样的:

Cross-Origin-Allow-Origin: *
Cross-Origin-Allow-Methods: GET
Cross-Origin-Allow-Headers: Authorization
Cross-Origin-Allow-Credentials: True

我的标题看起来已经正确了...所以出了什么问题?