小编Chr*_*ier的帖子

CORS,Amazon S3和Rails - 在IE 10和Safari上失败

IE 10支持CORS.Amazon S3支持CORS.

我们在所有浏览器中都有直接从站点到S3的上传工作,但是IE 10(没有使用IE 9-).它的工作原理如下:

  1. 用户选择一个文件(拖放或从文件输入中选择)

  2. (POST)我们必须在进入S3($.post('/static/sign_asset', { ... })之前"签署"该请求,该回复具有一整天都能完美激活的回调.

  3. (POST)然后我们使用文件数据和来自签名的数据将XHR设置为S3.

var xhr = new XMLHttpRequest();
// etc
var fd = new FormData();
// etc
xhr.open('POST', url, true);
xhr.send(fd);

文件上传,一切都在所有浏览器中完美运行,除了......

问题从IE 10开始:

  1. 在Access-Control-Allow-Origin标头中找不到Origin null.XMLHttpRequest:网络错误0x80070005,访问被拒绝.我们response.headers["Access-Control-Allow-Origin"] = "*"在发送响应的控制器中设置后,没有其他浏览器显示此信息.即使我们有这个错误,Chrome也会显示此错误,但请求仍然会通过.

  2. 尽管出现此错误,该文件实际上仍会上传到S3.Amazon S3做了303重定向的事情 - 这是我们验证文件是否已成功上传.

  3. (GET)这是对CORS Ajax请求的重定向,因此"重定向"不刷新它刚回来的页面并命中我们的服务器.IE 10使用Content-Type进行此请求multipart/form-data; boundary=---------------------------7dd2ce2201da

这就是导致Rails出错的原因.

Started GET "/static/signed/asset/tsabat/83ee6840-7158-0130-c19b-28cfe912f6ff?bucket=s.cdpn.io&key=5%2Fauthor-tim_2.jpg&etag=%2260fb3876d516553ff6f3a018066b3250%22" for 127.0.0.1 at
 2013-03-17 10:46:36 -0700

EOFError - bad content body:
  (gem) rack-1.4.5/lib/rack/multipart/parser.rb:74:in `block in Rack::Multipart::Parser#fast_forward_to_first_boundary'  (gem) rack-1.4.5/lib/rack/multipart/parser.rb:72:in `Rack::Multipart::Parser#fast_forward_to_first_boundary'
  (gem) rack-1.4.5/lib/rack/multipart/parser.rb:72:in `Rack::Multipart::Parser#parse' …
Run Code Online (Sandbox Code Playgroud)

amazon amazon-s3 cors internet-explorer-10

30
推荐指数
1
解决办法
3512
查看次数

标签 统计

amazon ×1

amazon-s3 ×1

cors ×1

internet-explorer-10 ×1