Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS S3文件(从AWS Lambda函数重定向)以403错误响应CORS飞行前选项请求_Amazon Web Services_Amazon S3_Cors - Fatal编程技术网

Amazon web services AWS S3文件(从AWS Lambda函数重定向)以403错误响应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

我有一个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>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');