在 Angularjs 中的 IE10+ 中访问被拒绝 CORs 请求,需要跨源资源共享错误(信息?)

Posted

技术标签:

【中文标题】在 Angularjs 中的 IE10+ 中访问被拒绝 CORs 请求,需要跨源资源共享错误(信息?)【英文标题】:Access denied CORs request in IE10+ in angularjs with required Cross Origin Resource Sharing error (info?) 【发布时间】:2015-11-19 07:33:55 【问题描述】:

我认为跨浏览器支持的日子已经成为过去,各种库与 Web 浏览器的一些细微差别和所谓的标准化隔离开来,但是......

我正在尝试使用 angularjs (v1.2.27) 执行 $http 获取请求:

       $http(
            url: vm.hostName + '/pdf/' + id,
            method : 'GET',
            responseType : 'arraybuffer',
            cache : false)
            .success(function (response) 

                var file = new Blob([response],  type: 'application/pdf' );

                var fileURL = URL.createObjectURL(file);
                console.log(fileURL);
                console.log(response.data);
                window.open(fileURL);
      );

它在 Chrome、FF 和 Safari 上运行良好(Mac 和 Win 7、8),但不适用于 IE10+,我明白了:

SEC7118:https://[api.domain.com]/pdf/55abc12345613af7946e 的 XMLHttpRequest 需要跨域资源共享 (CORS)。 错误:访问被拒绝。 在匿名函数 (https://[domain.com]/site/scripts/scripts.js:289:6) 在匿名函数 (https://[domain.com]/public/assets/js/angular/angular.js:7736:11) 在 WrappedCallback (https://[domain.com]/public/assets/js/angular/angular.js:11106:15) 在 WrappedCallback (https://[domain.com]/public/assets/js/angular/angular.js:11106:15) 在匿名函数 (https://[domain.com]/public/assets/js/angular/angular.js:11192:11) 在 Scope.prototype.$eval (https://[domain.com]/public/assets/js/angular/angular.js:12181:9) 在 Scope.prototype.$digest (https://[domain.com]/public/assets/js/angular/angular.js:12010:15) 在 Scope.prototype.$apply (https://[domain.com]/public/assets/js/angular/angular.js:12285:13) 完成后 (https://[domain.com]/public/assets/js/angular/angular.js:7994:34) 在完成请求(https://[domain.com]/public/assets/js/angular/angular.js:8196

api服务器返回的响应头是

Key Value
Response    HTTP/1.1 200 OK
Server  nginx/1.8.0
Date    Tue, 25 Aug 2015 13:40:45 GMT
Content-Type    application/pdf
Content-Length  86057
Connection  keep-alive
Access-Control-Allow-Methods    GET, PUT, POST, OPTIONS
Access-Control-Allow-Headers    Origin, Content-Type, Accept
Access-Control-Allow-Origin *
Content-Transfer-Encoding   binary

如果我查看响应正文(在开发人员工具中),我会收到一条消息,指出它无法呈现(并非不合理,因为它是 pdf),但提供了一个保存内容的链接,该链接在保存时和打开显示正确的 pdf。

网络响应似乎显示在给定内容长度的情况下下载了内容。

我查看了许多与 COR 相关的帖子,但无济于事。最接近的SEC7118: XMLHttpRequest for /socket.io/1/?t=1370206038749 required Cross Origin Resource Sharing (CORS) 没有帮助。 微软博客http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx 也没有提供更多线索(我猜它可能与'arraybuffer'和二进制数据有关,但现在处于死胡同,正在寻找进一步的灵感。

还有人建议吗? 附言。我控制着服务器 api,它由 vert.x (v2.5) 作为 Java REST 服务提供服务。

谢谢

【问题讨论】:

【参考方案1】:

*** answer 发布的解决方案解决了问题。 问题不在于服务器的响应,问题在于打开由

创建的 url
var file = new Blob([response],  type: 'application/pdf' );
var fileURL = URL.createObjectURL(file);

IE 不支持生成的 blob:xxx-yyy url 的 window.open。 请参阅链接答案以获取在 IE10+ 中显示 blob 所需的 javascript(这是我想要的)。

【讨论】:

以上是关于在 Angularjs 中的 IE10+ 中访问被拒绝 CORs 请求,需要跨源资源共享错误(信息?)的主要内容,如果未能解决你的问题,请参考以下文章

当 ajax 目标是 localhost 时,IE 10 和 11 中的访问被拒绝

当ajax目标是localhost时,IE 10和11中的访问被拒绝

使用 CORS 调用本地 URL 时 IE10 中的访问被拒绝

在 IE 中使用 iframe 时,信号器脚本中的访问被拒绝错误

IE10+ 上的 AngularJS,带有占位符的文本区域导致“无效参数”。

防止 IE 中出现“SCRIPT5:访问被拒绝”错误