jquery - 使用 JQuery 在 Internet Explorer 中进行 CORS 身份验证

标签 jquery ajax internet-explorer cors basic-authentication

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

我有一个开发环境(Intranet 区域)和一个需要身份验证的 Web 服务(Internet 区域),因此我使用 CORS。经过大量研究,服务器已设置为正确响应 CORS 请求;对此我百分百确定。

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 调用期间弹出的基本凭据?

最佳答案

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

以下是您应该注意的限制的完整列表:

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

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

  • JSONP
  • 使用 Flash 或 Silverlight
  • 在您自己的域上托管远程服务的 API

关于jquery - 使用 JQuery 在 Internet Explorer 中进行 CORS 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20614809/

相关文章:

javascript - 通过单击关闭菜单和 ESC 关闭菜单

javascript - 输入文本值删除后未更改

javascript - jQuery 根据下拉列表中的选择更新 div

ajax - 如何在 Laravel 中安装 vue-laravel-image-crop-upload?

internet-explorer - Codeigniter + Uploadify 用户在 IE 上传后自动注销

javascript - 如何在我的 html 上使用 getJSON

javascript - Rails 将生成的 js 参数从表单传递到 Controller

javascript - 从表单文本字段检索值并使用 RJS 在另一个表单文本字段中设置该值

javascript - IE8/9 幻灯片放映可见性问题..?

javascript - IE : indexOf results in "object doesn' t support this property or method"