代码:我在某个HAML文件中找到了以下代码片段。
= image_tag "https://s3.amazonaws.com/my_bucket/my_image.jpg"
它向S3发送请求并在浏览器中加载图像。我在存储桶上获取了以下CORS配置:
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>https://www.my_site.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
问题: 为了能够在客户端上操纵图像,这些图像应该被提供以下标头:
Access-Control-Allow-Origin: https://www.my_site.com
Access-Control-Allow-Methods: GET
但是这并没有发生。
原因:我的浏览器没有发送“Origin”请求头,因此s3没有响应所需的头文件。
为什么我认为缺少“Origin”头是原因:因为以下响应内容:
wget --server-response --header "Origin:https://www.my_site.com" "https://s3.amazonaws.com/my_bucket/my_image.jpg"
is the following:
HTTP/1.1 200 OK
x-amz-id-2: kQV8HEChV1...QHmHC1Gt/
x-amz-request-id: A626...4A2
Date: Wed, 03 Jul 2013 10:10:38 GMT
Access-Control-Allow-Origin: https://www.my_site.com
Access-Control-Allow-Methods: GET
Access-Control-Allow-Credentials: true
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
...
即'Access-Control-Allow-Origin'和'Access-Control-Allow-Methods'已经存在。
假定的解决方案:
是否有一种方法可以在HAML文件中手动添加所需的标头到image_tag中?例如:
= image_tag "https://s3.amazonaws.com/my_bucket/my_image.jpg", :headers=>["Origin"]