使用Amazon JS SDK上传至AWS S3时遇CORS问题及301状态码求助
嘿,我来帮你捋捋这个301的问题!既然你已经搞定了CORS,那咱们重点看导致S3返回301的常见坑:
Endpoint URL格式错误:这是最常见的原因!S3的区域Endpoint必须精准匹配,比如us-east-2的正确格式应该是
https://{bucket-name}.s3.us-east-2.amazonaws.com。如果你的URL少了amazonaws.com后缀、写错了区域代码,或者用了不带区域的全局Endpoint(比如https://s3.amazonaws.com/{bucket-name})去访问区域桶,S3就会返回301重定向到正确的区域Endpoint。仔细检查你上传函数里的目标URL是否完全符合规范。Bucket名称不符合DNS规范:如果你的桶名包含下划线、大写字母(虽然S3现在支持,但部分旧的Endpoint规则可能兼容不佳),或者格式过于复杂,也可能触发重定向。建议尝试用纯小写字母、数字和连字符的桶名测试,或者切换到路径式访问(比如
https://s3.us-east-2.amazonaws.com/{bucket-name}/file.txt)对比结果。HTTP与HTTPS协议不匹配:S3现在默认强制使用HTTPS,如果你的上传请求用HTTP访问HTTPS端点,或者反过来,也可能导致重定向。确保你的请求协议和S3 Endpoint的协议完全一致,优先使用HTTPS。
桶区域与请求区域不匹配:如果你创建桶时选择的是us-east-2,但请求时用了其他区域的Endpoint(比如us-east-1),S3会返回301并告知正确的区域Endpoint。去S3控制台确认桶的实际区域,然后对应调整请求中的Endpoint地址。
另外补充一句:301错误基本和Bucket Policy、ACL权限无关(你已经开了全权限),所以先聚焦在URL和Endpoint的正确性上,大概率能解决问题!
内容的提问来源于stack exchange,提问作者Kaito

