gpt4 book ai didi

javascript - jQuery、CORS、JSON(无填充)和身份验证问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:36 27 4
gpt4 key购买 nike

我有两个域。我试图通过另一个域的页面从一个域访问 JSON 对象。我已经阅读了所有我能找到的关于这个问题的内容,但仍然无法弄清楚。

提供 JSON 的域具有以下设置:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "origin, authorization, accept"

在我的其他域中,我正在调用以下内容:

$.ajax({
type:'get',
beforeSend: function(xhr) {
var auth = // authentication;
xhr.setRequestHeader("Authorization", "Basic " + auth);
}
url:myUrl,
dataType:'json',
error: function(xhr, textStatus, errorThrown) { console.log(textStatus, errorThrown); }
})

我知道“auth”已正确初始化(记录并检查)。但是,这不起作用。在 Firefox 的控制台中,我得到 请求网址:...

Request Method:
OPTIONS

Status Code:
HTTP/1.1 401 Authorization Required

如果我去掉 beforeSend:... 部分,我会看到以下内容

Request Method:
GET

Status Code:
HTTP/1.1 401 Authorization Required

但是,服务于 JSON 的域也可以服务于 JSONP。我不想用这个,主要是因为应用程序会在专用浏览器上不断运行,我担心 this issue .更重要的是,我真的很想知道我正在做的事情到底出了什么问题。我知道出于实际目的,有多种方法可以克服 JSONP 内存泄漏(例如不使用 jQuery)。

无论如何,当我使用 JSONP 时,我的代码看起来像这样:

$.ajax({
url:newUrl,
dataType:'jsonp',
jsonp:'jsonp'
}).done(function(d){console.log(d)})

这得到以下内容

Request Method:
GET

Status Code:
HTTP/1.1 200 OK

在它提示我输入用户名和密码的警告框之后。

jQuery 处理 JSONP 请求的方式与 JSON 请求有根本区别吗?如果是这样,我该如何解决?

谢谢。

编辑:这是我找到的。

基本上,因为我需要身份验证,所以 GET 请求发送授权 header 。但是,这不是一个“简单”的 header ,因此浏览器正在发送飞行前请求(OPTIONS)。但是,此预检请求没有任何身份验证,因此服务器拒绝了它。 “解决方案”是将服务器设置为让 OPTIONS 请求不需要身份验证,并向其报告 HTTP 状态 200。

引用:http://www.kinvey.com/blog/item/61-kinvey-adds-cross-origin-resource-sharing-cors

mail-archive[.com]/c-user@axis.apache.org/msg00790.html(不允许发布更多链接)

不幸的是,“解决方案”只适用于 Firefox 而不是 Chrome。 Chrome 只是将请求显示为红色,但没有提供有关失败原因的更多信息。

编辑 2:已在 Chrome 上修复:我试图从中获取数据的服务器具有不受信任的安全证书。因此,Chrome 上的预检请求失败。解决方案superuser[.com]/questions/27268/how-do-i-disable-the-warning-chrome-gives-if-a-security-certificate-is-not-trust(不允许发布更多链接)

最佳答案

Wellp,既然一会儿我rep够了,那我还是回答这个问题,采纳吧。

当您尝试向带有 header 的服务器发送 GET json 请求时,浏览器首先发送一个 OPTION 请求以确保您可以访问它。不幸的是,此 OPTION 请求无法进行任何身份验证。这意味着如果你想发送一个带有授权的GET,服务器必须允许一个选项没有授权。一旦我这样做了,事情就开始奏效了。

关于javascript - jQuery、CORS、JSON(无填充)和身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199426/

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