首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JQuery在Internet中的CORS认证

问使用JQuery在Internet中的CORS认证
EN

Stack Overflow用户
提问于 2013-12-16 15:42:22
回答 2查看 3.2K关注 0票数 2

我有很多问题可以问,但我先从这个开始,因为这个问题最让我困扰。

我有一个需要身份验证的开发环境(intranet区域)和一个web服务(internet区域),所以我使用的是CORS。经过大量的研究,服务器已经被设置来正确地响应CORS请求;其中我100%肯定。

已设置web服务以允许基本身份验证和基于cookie的身份验证。对于我的开发环境,我决定选择basic,因为它很好,很简单,并且在Firefox和Chrome中工作得很好。也就是说,当使用下面的JQuery Ajax调用web服务时,浏览器会显示一个弹出并允许我登录。

代码语言:javascript
复制
$.ajax({type:'GET',
    url:'https://whatever.com/theservice',
    xhrFields: {'withCredentials': true},
    dataType: "json",
    success: function(response) {
         //do something
    }
});

来自服务器的响应(缩写和信息):

代码语言:javascript
复制
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调用期间弹出的基本凭证?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-16 15:47:12

我认为这是因为IE8/IE9中使用的XDomainRequest对象有几个严重的限制,包括不能向请求中添加自定义头。

以下是您应该注意到的一系列限制:

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

当涉及到跨域请求时,我知道的主要解决方法(您也可以查看)是:

  • JSONP
  • 使用Flash或Silverlight
  • 在您自己的域中托管远程服务的API。
票数 1
EN

Stack Overflow用户

发布于 2013-12-18 14:31:38

愚蠢的我,我只是意识到,当“跨域访问数据源”安全选项设置为“启用”时,我不需要使用IE8/9中的CORS XDomainRequest。我之所以没有更早地意识到这一点,是因为我的网页是在HTTP上的,而服务是在HTTPS上的。在将我的页面切换到HTTPS并删除了jQuery.XDomainRequest.js插件之后,它就像一个魅力一样开始工作了,在Ajax调用期间访问服务时,我得到了基本身份验证弹出。不过,IE7没有工作,但这没什么大不了的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20614809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档