AWS S3 / EC2: при загрузке файла с сохранением файла выдается ошибка CORS - PullRequest
0 голосов
/ 24 февраля 2019

Я использую 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>

Когда я пытаюсь загрузить файл, сохраненный в моем экземпляре EC2, с помощью Javascript Library File-Saver, Я получаю следующую ошибку:

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

1 Ответ

0 голосов
/ 24 февраля 2019

S3 не отправляет заголовок 'Access-Control-Allow-Origin', если подстановочный знак * как здесь:

<AllowedOrigin>*</AllowedOrigin>

Принудительно s3 отправляет заголовок AllowedOrigin и ваш контент загружается с любого сайта, попробуйте это:

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

Я думаю, что один будет работать ..!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...