如果您尽管已正确设置一切仍遇到 CORS 错误,可以按照本故障排除指南操作。
如果在浏览器控制台中 CORS 错误上方看到 401/403 错误,您遇到的是不同的问题(与 CORS 无关)。
如果确实是 CORS 问题,请参阅解决 CORS 问题。
- 在浏览器中打开开发者工具。
- 前往 Network(网络) 选项卡,找到失败的请求。您可能需要重新加载页面,因为只有在打开开发者工具后才会记录请求。
- 检查响应头中是否包含以下两个头:
cf-cache-statuscf-mitigated
您的请求被 WAF 规则之一阻止。检查您的安全事件以确定阻止原因。
您的请求被防盗链保护阻止。
使用配置规则编辑防盗链保护设置,或完全禁用它。
您的请求可能签名不正确。尝试通过 curl 发送请求可能会获得更清晰的错误消息。
请参阅示例页面上的 S3 签名示例。
以下是 CORS 配置的一些常见问题:
ExposeHeaders缺少ETag等头AllowedHeaders缺少Authorization或Content-Type等头AllowedMethods缺少POST/PUT等方法
如果您将对 Cloudflare REST API (api.cloudflare.com) 使用具有 Object Read & Write(对象读取和写入) 或 Object Read only 权限创建的 R2 API 令牌,对象请求将无法通过身份验证,并返回以下之一:
- 当令牌适用于所有存储桶时:
{"code":10002,"message":"Unauthorized"}(HTTP 401)。 - 当令牌限定于特定存储桶时:
{"code":10000,"message":"Authentication error"}(HTTP 403)。
对象级令牌仅受 S3 兼容 API 支持,该 API 使用 AWS Signature Version 4 (SigV4) 进行身份验证。
要解决此问题:
- 要继续使用对象级令牌,请通过 S3 兼容 API 而非 REST API 发起对象请求。S3 兼容 API 也更适合对象操作:REST API 有速率限制。
- 要使用 REST API,请使用 Admin Read & Write(管理员读取和写入) 或 Admin Read only(仅管理员读取) 令牌进行身份验证。Admin 令牌授予账户范围的访问权限,而非存储桶范围的访问权限。
当您遇到 HTTP 5XX 错误时,通常表示您的 Cloudflare R2 存储桶被过多并发请求压垮。这些错误可能触发存储桶范围的读写锁,影响所有正在进行的操作的性能。
为避免这些中断,实施管理请求量的策略非常重要。
以下是一些缓解措施:
跟踪存储桶的并发请求数量。如果客户端遇到 5XX 错误,请确保它重试操作并与其他客户端通信。通过协调,客户端可以集体减速,降低请求速率并保持更稳定的成功操作流。
如果用户直接上传到存储桶(例如使用 S3 或 Workers API),您可能无法监控或强制执行并发限制。在这种情况下,我们建议使用存储桶分片。
如需以更高复杂度换取更高容量,请考虑存储桶分片。此方法将读写分布到多个存储桶,减少单个存储桶的负载。虽然分片无法防止单个热点对象耗尽容量,但可以减轻整体影响并提高系统弹性。
在 Cloudflare 仪表板中,您可以通过选择 View prefixes as directories(将前缀显示为目录) 将名称中包含 / 的对象显示为文件夹。
例如,名为 example/object 的对象将显示如下。
- example
- object
以 / 结尾的对象名称会导致 Cloudflare 仪表板将对象渲染为包含未命名对象的文件夹。
例如,将名为 example/ 的对象上传到 R2 存储桶将显示如下。
- example
This object is unnamed