我有很多问题可以问,但我先从这个开始,因为这个问题最让我困扰。
我有一个需要身份验证的开发环境(intranet区域)和一个web服务(internet区域),所以我使用的是CORS。经过大量的研究,服务器已经被设置来正确地响应CORS请求;其中我100%肯定。
已设置web服务以允许基本身份验证和基于cookie的身份验证。对于我的开发环境,我决定选择basic,因为它很好,很简单,并且在Firefox和Chrome中工作得很好。也就是说,当使用下面的JQuery Ajax调用web服务时,浏览器会显示一个弹出并允许我登录。
$.ajax({type:'GET',
url:'https://whatever.com/theservice',
xhrFields: {'withCredentials': true},
dataType: "json",
success: function(response) {
//do something
}
});来自服务器的响应(缩写和信息):
HTTP/1.1 401 Unauthorized
Access-Control-Allow-Origin: http://mysandbox/
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Credentials: true
WWW-Authenticate: Basic realm="Realm"但是,IE10不允许这样做(不显示凭据弹出),但至少有一个安全选项可以启用这种行为:设置“跨域访问数据源”选项以“启用”,并且,它就像梦一样工作,我开始获得弹出窗口。这是可以接受的,因为它只是一个开发环境,而不是以这种格式发布的。
但是,当我使用相同的安全选项集在IE8/9中测试相同的示例时(不幸的是,这是必要的),浏览器将收到401响应,但不会显示弹出窗口。关于信息,我使用jQuery.XDomainRequest.js库为IE8/9添加CORS功能。
所以我的问题是:我是遗漏了什么,还是IE8/9根本不支持Ajax调用期间弹出的基本凭证?
发布于 2013-12-16 15:47:12
我认为这是因为IE8/IE9中使用的XDomainRequest对象有几个严重的限制,包括不能向请求中添加自定义头。
以下是您应该注意到的一系列限制:
当涉及到跨域请求时,我知道的主要解决方法(您也可以查看)是:
发布于 2013-12-18 14:31:38
愚蠢的我,我只是意识到,当“跨域访问数据源”安全选项设置为“启用”时,我不需要使用IE8/9中的CORS XDomainRequest。我之所以没有更早地意识到这一点,是因为我的网页是在HTTP上的,而服务是在HTTPS上的。在将我的页面切换到HTTPS并删除了jQuery.XDomainRequest.js插件之后,它就像一个魅力一样开始工作了,在Ajax调用期间访问服务时,我得到了基本身份验证弹出。不过,IE7没有工作,但这没什么大不了的。
https://stackoverflow.com/questions/20614809
复制相似问题