Cloudflare R2通过Express JS重定向时OPTIONS预请求403禁止问题
解决Cloudflare R2 OPTIONS预请求403 Forbidden问题
1. 检查并配置R2存储桶的CORS规则
这是核心环节——R2自身的CORS规则必须明确允许OPTIONS预请求,否则仅调整DNS设置无法解决问题。
在R2存储桶的CORS配置中添加如下规则(按需修改参数):
[ { "AllowedOrigins": ["https://你的前端域名.com", "*"], // 生产环境建议指定具体源,*仅用于测试 "AllowedMethods": ["OPTIONS", "GET", "HEAD"], // 必须包含OPTIONS方法 "AllowedHeaders": ["*"], // 若前端发送自定义头部,需替换为具体头部列表 "ExposeHeaders": [], "MaxAgeSeconds": 86400 } ]
注意:带凭证的跨域请求中,AllowedHeaders不能用*通配符,需明确列出前端传递的所有自定义头部。
2. 确保重定向/代理环节正确传递预请求头部
如果自定义DNS通过转发或代理导向R2,需确认:
- OPTIONS请求的
Origin、Access-Control-Request-Method、Access-Control-Request-Headers三个关键头部未被过滤或修改,需完整传递给R2。 - 优先使用反向代理而非302重定向:预请求对重定向兼容性差,代理模式能直接转发请求并返回R2的CORS响应,避免额外的跳转问题。
3. 排查Cloudflare防火墙与页面规则拦截
若自定义DNS托管在Cloudflare,检查以下规则:
- 防火墙规则:进入「防火墙」→「防火墙规则」,确认没有针对OPTIONS方法的拦截策略,如有则调整为允许。
- 安全级别:高安全级别可能误拦截OPTIONS预请求,可临时调低测试,或添加例外规则允许你的前端源发送OPTIONS请求。
- 页面规则:确保没有页面规则对OPTIONS请求设置缓存(预请求不应被缓存),或修改其响应行为。
4. 用命令行验证请求有效性
通过curl模拟预请求,排查响应问题:
curl -v -X OPTIONS \ -H "Origin: https://你的前端域名.com" \ -H "Access-Control-Request-Method: GET" \ https://你的R2自定义域名.com/资源路径
若返回200,检查响应头部是否包含Access-Control-Allow-Origin、Access-Control-Allow-Methods;若仍返回403,说明R2的CORS配置未生效,或请求被中间环节拦截。
内容的提问来源于stack exchange,提问作者mbenchekroun
相关产品推荐
相关产品推荐

