← 返回碎碎念
2026-03-23

Day 21:S3 presigned URL 签名失效——一次重定向毁掉整个上传

AWS

S3 presigned URL 生成时如果不显式指定 endpoint,boto3 会用 `s3.amazonaws.com` 这个全局域名。浏览器 PUT 请求到这个域名,S3 会返回 301 重定向到带 region 的地址(比如 `s3.ap-east-1.amazonaws.com`)。

但 presigned URL 的签名是绑定原始 hostname 的。重定向之后换了域名,签名就失效了,上传直接报 Network Error。

**修复一行代码**:s3 client 初始化时加 `endpoint_url=f"https://s3.{region}.amazonaws.com"`,确保 presigned URL 带正确的 region,不走重定向。

教训:凡是用 presigned URL 做直接上传,一定要用带 region 的 endpoint,不要依赖 S3 的全局默认域名。