我有两个域。我正在尝试从一个域通过另一个域上的页面访问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的控制台中,我收到请求URL:…
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。我不想使用它,主要是因为该应用程序将在专用的浏览器上持续运行,并且我对此问题感到担心。更重要的是,我真的很想知道我在做什么实际上有什么问题。我知道,出于实际目的,有多种方法可以克服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请求正在发送一个Authorization标头。但是,这不是“简单”标头,因此浏览器正在发送飞行前请求(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上的预检请求失败。解决方案超级用户[.com] /
questions / 27268 /如果不信任安全证书,如何禁用警告的chrome给予信任(不允许发布更多链接)
很高兴,既然我以后有足够的代表,我不妨回答这个问题并接受它。
当您尝试向GET
带有标头的服务器发送json请求时,浏览器会首先发送一个OPTION
请求以确保您可以访问它。不幸的是,该OPTION
请求不能带有任何身份验证。这意味着,如果要发送GET
带有auth的邮件,则服务器必须允许
不带auth 的OPTION 。一旦执行此操作,一切就开始起作用。
问题内容: 因为在AngularJS中使用CORS和http身份验证可能会比较棘手,所以我编辑了问题以分享一个经验教训。首先,我要感谢igorzg。他的回答对我很有帮助。场景如下:您想使用AngularJS $ http服务将POST请求发送到另一个域。获取AngularJS和服务器设置时,需要注意一些棘手的事情。 第一:在您的应用程序配置中,您必须允许跨域调用 第二:您必须指定withCrede
很好的一天, 我正在使用asp.netapi和Angular。 当我试图从api获取身份验证令牌时,我收到错误 我有一个控制器,它为我的应用程序返回身份验证令牌。这是控制器的逻辑 如你所见,我正在返回对象LoginAprovado。 我不知道如何解决这个问题,它似乎是一个cors问题。 这是我的网页配置 请注意,在我的customeheaders部分中,access controol allow
有什么想法吗?
问题内容: 确保GWT + Tomcat应用程序执行身份验证和授权的最佳策略是什么? 问题答案: 有两种基本策略: 确保入口点; 保护远程服务。 最简单的方法是使用常规的Web应用程序安全工具来限制对GWT生成的html / js文件的访问: 春季安全; web.xml约束。 这样可以让您拥有eg 和。 保护远程服务 如果上述解决方案还不够,您可以进行更深入的研究。我已经通过Spring Secu
我正在Angular中实现Azure Active Directory B2C身份验证。我正在使用msal拦截器连接Azure广告B2C。身份验证请求失败并出现错误 访问“https://login.microsoftonline.com/...”的XMLHttpRequest从来源“http://localhost/..."已被CORS策略阻止:请求的资源上没有“访问-控制-允许-来源”标头。
问题内容: 我试图让我的自定义Java应用程序使用我们的Active Directory服务器进行身份验证,但由于某种原因我无法使其正常工作。谁能看到为什么呢?这是我的方法如下: 结果: 问题答案: 你尝试过这种方式吗? 也更换 与