【问题标题】:AWS S3 / EC2: Downloading file with file-saver giving CORS errorAWS S3 / EC2:使用文件保护程序下载文件给出 CORS 错误
【发布时间】:2019-07-17 19:36:57
【问题描述】:

我正在使用 AWS 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>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

当我尝试使用 Javascript Library File-Saver 下载保存在我的 EC2 实例上的文件时,我收到以下错误:

Access to XMLHttpRequest at 'EC2-Instance' from origin 'S3-Bucket' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

导致 File-Saver 出错的行是:

function d(a) {
    var b = new XMLHttpRequest();
    return b.open("HEAD", a, !1), b.send(), 200 <= b.status && 299 >= b.status;  <-- This line
}

当我在 curl 中模拟请求并启用详细信息时,我得到以下信息:

< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD
< Access-Control-Max-Age: 3000
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method

知道为什么我仍然收到此错误吗?

编辑:

我尝试了以下请求以查看标头详细信息:

curl -H "Access-Control-Request-Method: GET" -H "Origin: S3 Bucket" --head -IXHEAD EC2_Instance

由于某种原因,我得到以下没有 CORS 信息的信息:

HTTP/1.1 200 OK
Server: nginx/1.15.8
Date: Sun, 24 Feb 2019 04:38:20 GMT
Content-Type: application/octet-stream
Content-Length: 6950
Last-Modified: Sat, 23 Feb 2019 22:35:01 GMT
Connection: keep-alive
ETag: "5c71ca95-1b26"
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000
Cache-Control: private
Accept-Ranges: bytes

【问题讨论】:

  • 响应的 HTTP 状态码是什么? (您可以使用浏览器开发工具中的网络窗格进行检查。)
  • @sideshowbarker 它给了我一个 200 OK
  • 尝试使用其他浏览器并尝试强制重新加载以清除浏览器缓存。
  • @sideshowbarker 不幸的是仍然无法正常工作

标签: amazon-s3 amazon-ec2 cors


【解决方案1】:

如果通配符 * 像这样,S3 不会发送“Access-Control-Allow-Origin”标头:

<AllowedOrigin>*</AllowedOrigin>

强制 s3 发送 AllowedOrigin 标头并从任何站点加载您的内容,试试这个:

<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>

我认为一个会工作..!

【讨论】:

  • 哦,好吧..你能分享标题细节的屏幕截图吗?从浏览器控制台网络控制台
  • 我当然会抓住它。您知道来源应该是我的 s3 存储桶还是 EC2 实例?
  • 如果从 ec2 发送请求,它将是 ec2...从您发送请求的位置开始
  • 好吧,我就是这么想的。给出错误的代码行位于 S3 存储桶上。在我上面的编辑中,当我将 S3 存储桶设为源时,我看不到我配置的 CORS 数据。当我切换它们并使 EC2 成为源时,我确实看到了我配置的 CORS 数据
  • 这到底能告诉我什么?对不起,如果这是一个愚蠢的问题
猜你喜欢
  • 2021-05-08
  • 1970-01-01
  • 2017-04-27
  • 2018-08-22
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
相关资源
最近更新 更多