代码:我在一些 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"
如下:
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"]