gpt4 book ai didi

jquery - 如何使用授权 header 发出 GET CORS 请求

转载 作者:行者123 更新时间:2023-12-03 22:17:29 25 4
gpt4 key购买 nike

我正在阅读有关 CORS 请求的内容,并且我已成功发出常规 GET 或 POST 请求,并且效果很好。但是,当我将授权 header 添加到 GET 或 POST 请求时,预检 OPTIONS 请求将发送到服务器,并且我收到 500 INTERNAL SERVER ERR,并且实际请求未发送。我的问题是预检实际上是如何工作的,它需要什么响应才能发送主要请求?是否可以在没有预检的情况下发送它,因为我确信这样它就可以工作?服务器端是用 Django 1.6 编写的,并将 ACCESS-ALLOW-ORIGIN 设置为 *,它可以处理常规的 post 和 get 请求。

这是我的 JS 代码:

 $.ajax({
type: "GET",
url: "http://url/login/",
async:false,
contentType: "application/json",
headers: {
"Authorization": "Basic " + btoa(loginName + ':' + password),
},
success: function (data) {
alert("OK!");
},
failure: function(errMsg) {
alert(errMsg);
}
});

这些是执行请求时来自 Chrome DevTools 的 header :请求 header :

OPTIONS /login/ HTTP/1.1
Host: url
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Access-Control-Request-Headers: accept, authorization, content-type
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,hr;q=0.6,sr;q=0.4

响应 header :

HTTP/1.1 500 INTERNAL SERVER ERROR
Date: Thu, 31 Jul 2014 16:15:19 GMT
Server: Apache/2.2.15 (CentOS)
X-Frame-Options: SAMEORIGIN
Access-Control-Allow-Origin: *
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

最佳答案

要传递授权 header ,您必须将 Access-Control-Allow-Credentials 设置为 true。

问题是,根据规范 ( MDN explains it simpler ),如果 Access-Control-Allow-Credentials 设置为 true,Access-Control-Allow-Origin > 不能包含 *,因此允许任何主机发出带有附加凭据的请求。

有两个选项可以解决此问题:

  • Access-Control-Allow-Origin 设置为发出请求的实际主机
  • 如果有多个主机:“规范”方式是在应用程序本身中建立一个主机白名单,然后检查 Origin header (如果它在列表中)并添加 Origin 作为 Access-Control-Allow-Origin header 值。

使用 Django,可以在中间件中检查 Origin 并添加 header ,但这本身就是一个不错的问题(并且可能已经被问过)

关于jquery - 如何使用授权 header 发出 GET CORS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25064158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com