amazon-s3 - AWS S3 / EC2:使用文件保护程序下载文件给出CORS错误
问题描述
我正在使用 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
解决方案
如果通配符 * 像那里一样,S3 不会发送“Access-Control-Allow-Origin”标头:
<AllowedOrigin>*</AllowedOrigin>
强制 s3 发送 AllowedOrigin 标头并从任何站点加载您的内容,试试这个:
<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>
我认为一个会工作..!
推荐阅读
- asp.net-core - System.IO.FileNotFoundException: '未找到报告文件。'
- docker - Traefik Docker“主脚本未知”背后的 Nginx
- node.js - 亚马逊广告 API - 从 curl 转换为 node-fetch 时不支持内容类型
- javascript - 我不断收到使用 Cypress/Cucumber 的 Step 定义错误
- python - 当 status_code = 200 时使用 python 请求重试
- kotlin - 计算数字而不分开它们
- python - 如何自定义情节图例顺序?
- apache - .htaccess 如何为移动和桌面提供不同目录中的内容?
- jestjs - 无法使用 ES 模块在 Jest 中模拟
- python - Django 3.2 中的分页和切片问题