Cloudflare R2:为不同允许源配置不同方法的CORS策略
正确的Cloudflare R2 CORS策略配置
你的配置无效的核心原因是JSON语法错误——两个CORS规则对象之间缺少逗号,导致Cloudflare无法解析整个配置。除此之外,还需要补充必要的CORS头部配置,确保浏览器预请求(OPTIONS)能正常通过。
以下是满足你需求的正确配置:
[ { "AllowedOrigins": ["https://example.com"], "AllowedMethods": ["GET", "PUT", "POST", "DELETE"], "AllowedHeaders": ["*"], "ExposeHeaders": ["ETag"] }, { "AllowedOrigins": ["*"], "AllowedMethods": ["GET"], "AllowedHeaders": ["*"], "ExposeHeaders": ["ETag"] } ]
关键说明:
- 修复JSON语法:在两个规则对象之间添加逗号(
,),确保JSON格式合法,这是配置生效的前提。 - 域名格式修正:将
https://example.com/改为https://example.com,末尾的斜杠会被视为路径的一部分,可能导致域名匹配失败。 - 补充必要头部:
AllowedHeaders: ["*"]:允许所有请求头部,确保OPTIONS预请求能通过,避免浏览器拦截后续实际请求。ExposeHeaders: ["ETag"]:暴露常用的响应头部给前端,比如ETag用于缓存验证,你可以根据需求添加更多头部。
- 规则顺序:将自有域名的规则放在前面,Cloudflare R2会按顺序匹配规则,优先匹配更具体的域名规则,避免通用规则覆盖自有域名的全方法权限。
验证方法:
配置保存后,你可以通过浏览器开发者工具的网络面板查看请求的响应头部,确认Access-Control-Allow-Origin等CORS相关头部是否正确返回;也可以使用curl发送OPTIONS请求测试:
curl -X OPTIONS -H "Origin: https://example.com" https://<你的R2存储桶域名>/<对象路径>
如果返回的响应中包含Access-Control-Allow-Origin: https://example.com以及对应的Access-Control-Allow-Methods,说明配置生效。
内容的提问来源于stack exchange,提问作者user1607016
相关产品推荐
相关产品推荐

