jquery - IE9 + CORS + jQuery + 亚马逊 S3

标签 jquery amazon-web-services amazon-s3 cors getjson

总结一下:一切都在以下方面完美运行:

站点 => 通过 jQuery getJSON => S3 JSON 文件(启用 CORS)

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

这在除 IE9 之外的所有浏览器中都能完美运行。

有什么想法吗?我认为 CORS 规则可以解决 IE9 的问题,但显然不是。这是另一部分:我在 IE9 控制台中没有收到任何错误,因此我必须逐行找出这个蹩脚的 CORS 问题。

最佳答案

IE9 使用 XDomainRequest 对象发出 CORS 请求,这是其他浏览器使用的 XMLHttpRequest 对象的有限版本。可以在此处找到 XDomainRequest 对象的概述:

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

特别查看第 3 项,其中指出:“不得将自定义 header 添加到请求中”。通过查看您的配置,您似乎需要一个 Authorization header 。 IE9 中不允许这样做。 (尽管为了绝对确定,但查看您如何提出请求的示例会很有帮助)。

另请注意,如果您还没有这样做,则应该使用 IE8/9 的 XDomainRequest。本文提供了如何选择正确对象的示例:

http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/

相关代码是:

function createCORSRequest(method, url){
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr){
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined"){
    xhr = new XDomainRequest();
    xhr.open(method, url);
  } else {
    xhr = null;
  }
  return xhr;
}

关于jquery - IE9 + CORS + jQuery + 亚马逊 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029437/

相关文章:

javascript - 如何在javascript中的href标签中添加来自json数据的url

javascript - 如何将事件添加到 javascript 运行时创建的 html 小部件

angular - 如何只允许特定用户访问 Amazon S3 上的内容

java - java中的slugify url

javascript - jQuery:使用 'not' 选择器出现奇怪的结果?

javascript - jQuery:如何获得正确的scrollRight值?

amazon-web-services - AWS 时间流 : Unable to ingest records into AWS Timestream

amazon-web-services - 如何使用 AmazonS3Client 在沙盒环境中测试 amazon s3

java - 读取和写入 Amazon s3 存储桶中的文件

java - 使用 Java API 在 AWS S3 上禁用 HTTPS