在铬22的Safari 6。
使用CORS启用S3桶,用下面的代码加载从S3为使用图像在画布(与提取作为主要意图):
<!-- In the html -->
<img src="http://s3....../bob.jpg" />
// In the javascript, executed after the dom is rendered
this.img = new Image();
this.img.crossOrigin = 'anonymous';
this.img.src = "http://s3....../bob.jpg";
我观察到的情况如下:
- 禁用缓存
- 一切工作正常,两个图像加载
然后用高速缓存尝试启用它:
- 启用缓存
- DOM加载图像,图像的画布创建一个DOM安全异常
如果我修改代码的JavaScript部分追加查询字符串,像这样:
this.img = new Image();
this.img.crossOrigin = 'anonymous';
this.img.src = "http://s3....../bob.jpg?_";
一切正常,即使有缓存功能完整。 我上到高速缓存是通过使用HTTP代理和观察,在发生故障的情况下,实际上没有从服务器请求的图像的问题。
我不得不得出的结论是,图像缓存保存原始请求头,然后再被用于启用请求后续CORS - 正在生成因违反同源策略的安全异常。
这是预期的行为?
编辑:在Firefox。
EDIT2:在S3桶一个Cors政策
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
我使用的是敞开的,因为我只是从我的本地盒测试现在。 这是不是在生产呢。
EDIT3:更新CORS策略指定原点
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://localhost:5000</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
验证传出标题:
Origin http://localhost:5000
Accept */*
Referer http://localhost:5000/builder
Accept-Encoding gzip,deflate,sdch
Accept-Language en-US,en;q=0.8
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.3
传入标题:
Access-Control-Allow-Origin http://localhost:5000
Access-Control-Allow-Methods GET
Access-Control-Allow-Credentials true
仍然无法在Chrome中,如果加载到画布上时,我不胸围缓存。
编辑4:
只是在故障情况下注意到这一点。
输出头:
GET /373c88b12c7ba7c513081c333d914e8cbd2cf318b713d5fb993ec1e7 HTTP/1.1
Host amir.s3.amazonaws.com
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.91 Safari/537.4
Accept */*
Referer http://localhost:5000/builder
Accept-Encoding gzip,deflate,sdch
Accept-Language en-US,en;q=0.8
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.3
If-None-Match "99c958e2196c60aa8db385b4be562a92"
If-Modified-Since Sat, 29 Sep 2012 13:53:34 GMT
传入标题:
HTTP/1.1 304 Not Modified
x-amz-id-2 3bzllzox/vZPGSn45Y21/vh1Gm/GiCEoIWdDxbhlfXAD7kWIhMKqiSEVG/Q5HqQi
x-amz-request-id 48DBC4559B5B840D
Date Sat, 29 Sep 2012 13:55:21 GMT
Last-Modified Sat, 29 Sep 2012 13:53:34 GMT
ETag "99c958e2196c60aa8db385b4be562a92"
Server AmazonS3
我觉得这是第一个请求,由DOM触发。 我不知道这是不是虽然JavaScript的请求。