在 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 发布的解决方案解决了问题。 问题不在于服务器的响应,问题在于打开由
创建的 urlvar 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 时,信号器脚本中的访问被拒绝错误