在客户端请求S3 GET预签名URL时,可能会遇到CORS错误,因为AWS S3将拒绝无效的Origin请求。解决这个问题的一个方法是在S3存储桶中配置CORS规则,使得浏览器能够正确访问预签名URL。以下是一个示例CORS规则,可以允许所有源访问S3存储桶:
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST",
"HEAD"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
配置CORS规则后,确保生成的预签名URL包括必要的CORS头部,例如:
https://example-bucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAEXAMPLE%2F20220101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220101T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=EXAMPLESIGNATURE
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, PUT, POST, HEAD
Access-Control-Allow-Headers: *
确保预签名URL的CORS头部与S3存储桶的CORS规则匹配,以确保浏览器可以正确访问预签名URL。