Amazon web services AWS S3文件(从AWS Lambda函数重定向)以403错误响应CORS飞行前选项请求
我有一个AWS S3 bucket,配置为静态网站,具有以下CORS配置:Amazon web services AWS S3文件(从AWS Lambda函数重定向)以403错误响应CORS飞行前选项请求,amazon-web-services,amazon-s3,cors,Amazon Web Services,Amazon S3,Cors,我有一个AWS S3 bucket,配置为静态网站,具有以下CORS配置: <?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GE
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我可以使用代码中相同的URL直接从浏览器访问S3HTML页面。是的,API域与S3域不同:
api.domain.com --> initiates the request (redirection)
sub.domain.com/page.html --> requested resource (redirection target)
服务器以403错误响应CORS飞行前选项请求,浏览器报告以下错误消息:
在“S3文件”上访问XMLHttpRequest(从“API端点”重定向)
来自来源的“null”已被CORS策略阻止:响应
飞行前请求未通过访问控制检查:否
“Access Control Allow Origin”标头出现在请求的服务器上
资源
我最初是通过在我的Serverless.yml中添加以下行来使用无服务器框架设置站点的:
SiteBucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
BucketName: ${self:custom.siteName}
WebsiteConfiguration:
IndexDocument: index.html
ErrorDocument: error.html
CorsConfiguration:
CorsRules:
- AllowedMethods:
- GET
- HEAD
AllowedOrigins:
- "*"
MaxAge: 3000
SiteBucketPolicy:
Type: "AWS::S3::BucketPolicy"
DependsOn: "SiteBucket"
Properties:
Bucket: ${self:custom.siteName}
PolicyDocument:
Statement:
- Effect: Allow
Principal: "*"
Action:
- "s3:GetObject"
Resource:
- "arn:aws:s3:::${self:custom.siteName}/*"
一旦bucket是通过无服务器框架创建的,并且看到了CORS错误,我就在S3上手动欺骗了CORS策略,但没有成功
还值得注意的是,S3站点是使用CloudFront发行版建立的,但我不确定这是否会产生影响
这应该是一个简单的解决办法,但事实证明这相当困难。请帮助。这不应该包括一个正确的URL吗:
redirectToUrl(303, 's3-bucket.amazon.com/page.html');
我认为将其更改为以下内容可能会解决您的问题:
redirectToUrl(303, 'https://s3-bucket.amazon.com/page.html');
如标题所述,它是403。有相同的问题。你有没有想过?相信我,这不是问题所在。我只是放了一些东西来显示文件来自S3,而不是真正的URL。
redirectToUrl(303, 'https://s3-bucket.amazon.com/page.html');