如何解决“请求的资源上没有'Access-Control-Allow-Origin'标头不存在”错误?

时间:2019-09-24 06:29:44

标签: amazon-s3 cors amazon-cloudfront

我有两个S3存储桶。第一个是具有图像和pdf数据(通过CloudFront),第二个是静态托管在s3上。当我从URL调用图像时,它将被加载,但是当我调用pdf时,显示以下错误:->

  

“从源'url'处获取'pdf链接'的访问已被CORS政策阻止:请求的资源上不存在'Access-Control-Allow-Origin'标头。如果不透明的响应满足了您的需求,将请求的模式设置为“ no-cors”以在禁用CORS的情况下获取资源”。

要解决此问题,我设置了S3 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>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>PUT</AllowedMethod>
   <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我还通过将“访问控制请求头”,“访问控制请求方法”,“起源”白名单列入白名单来设置cloudfront,并选择GET,PUT和OPTIONS。

建议我如何解决此错误?

1 个答案:

答案 0 :(得分:0)

最后,我克服了这个问题。主要问题是协议从“ HTTP重定向到HTTPS”。 当我从HTTP发送请求时,CloudFront会将其重定向到HTTPS。通过这种重定向,我的图像正在加载,但pdf无法加载,重定向期间失败。 然后,我将CloudFront的查看器控制协议更改为仅HTTPs,现在可以使用了。 您还可以将其设置为HTTP和HTTPS。