微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有两个域名.我正在尝试通过另一个域中的页面一个域访问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

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

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

谢谢.

编辑:这是我找到的.

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

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

mail-archive [.com] /[email protected]/msg00790.html(不允许发布更多链接)

不幸的是,“解决方案”仅适用于Firefox,而不适用于Chrome. Chrome只是以红色显示请求,但不会再向我提供有关失败原因的信息.

编辑2:在Chrome上修复:我尝试从中获取数据的服务器有一个不受信任的安全证书. Chrome上的预检请求因此而失败.解
超级用户[.com] / questions / 27268 / how-do-i-disable-the-warning-chrome-give-if-a-security-certificate-is-not-trust(不允许发布更多链接)

解决方法:

Welp,既然我已经有足够的代表了一段时间,我不妨回答这个问题并接受它.

当您尝试向带有标头的服务器发送GET json请求时,浏览器首先发送OPTION请求以确保您可以访问它.不幸的是,这个OPTION请求不能随身携带任何身份验证.这意味着如果要使用auth发送GET,服务器必须允许没有auth的OPTION.一旦我这样做,事情就开始起作用了.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐