用于外部访问的 S3 CORS

Posted

技术标签:

【中文标题】用于外部访问的 S3 CORS【英文标题】:S3 CORS for external acces 【发布时间】:2012-12-13 05:01:46 【问题描述】:

我的头撞到了墙上,希望这是一个愚蠢的疏忽,有人可以帮忙。

我正在使用一个视网膜 jquery 插件来加载视网膜图形(顺便说一句,效果很好!);但是,它正在寻找附加了“_2x”的文件——如果它们托管在我们的服务器上,这些文件存在并且工作得很好。

问题出现在 Amazon S3 上,它允许我直接链接到文件;但是,当它尝试查找带有retina 后缀的文件时,会出现以下错误:

XMLHttpRequest cannot load http://cloud.mfivem.com/ui/bg/bg_linen_2x.png. Origin http://beta.mfivem.com is not allowed by Access-Control-Allow-Origin.

现在,原始文件存在,视网膜版本也存在 - 这些文件是:

http://cloud.mfivem.com/ui/bg/bg_linen.png
http://cloud.mfivem.com/ui/bg/bg_linen_2x.png

我也试过文件的后门:

http://mfivem.s3.amazonaws.com/ui/bg/bg_linen_2x.png

这是我为存储桶配置的 CORS 文件:

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

我非常感谢任何建议,并且考虑到支持视网膜的网站的爆炸式增长,我相信其他成员将来会发现这很有帮助。

感谢阅读!

** 修改过的网址注释**

【问题讨论】:

错误消息显示http://beta.mfivem.com,但您的CORS 配置文件有&lt;AllowedOrigin&gt;http://test.mydomain.com&lt;/AllowedOrigin&gt;。应该是&lt;AllowedOrigin&gt;http://beta.mfivem.com&lt;/AllowedOrigin&gt; 哦,是的,这在我刚刚更改的 CORS 文件中是正确的,但也 - CORS 文件需要完整域 (mfivem.com) 还是带有 cname 的域 (beta.mfivem. com) 域可以是精确值,例如http://beta.mfivem.com,也可以是通配符,例如http://*.mfivem.com 我已将问题范围缩小到我相信的 cloudfront 问题,就好像我尝试使用直接 s3 存储桶 url 访问文件一样,它工作正常。 CORS 文件支持访问。当我尝试通过 CNAME 访问时,我得到了那个错误 【参考方案1】:

好吧,我想通了……

我必须将 HEAD 添加到 AllowedMethod,但更重要的是...我必须更改文件的名称并重新上传它们。

我认为在 S3 和 Cache 之间没有正确提取文件;但是,在重命名文件、修改 allowedmethod 以包含 head 之后,它现在可以正常工作了。

真的很兴奋,因为现在我可以从我们的自定义 CNAME 服务器提供文件,使用 Cloudfront + S3 掩盖又长又丑的 s3 地址。

如果您对此有任何问题,请发表评论,我会尽力提供帮助!

【讨论】:

以上是关于用于外部访问的 S3 CORS的主要内容,如果未能解决你的问题,请参考以下文章

允许 lambda 函数访问 S3 存储桶但阻止外部 IP

在路由器外部访问时出现 Spring React Chrome CORS 错误

如何创建代理来访问外部 API? [复制]

vue访问外部url会被取消

如何使用 CORS 限制 AWS S3 访问?

我有啥方法可以按表级别限制对 Redshift 外部模式的访问?