Требуется ли Amazon S3 время для обновления настроек CORS? Сколько?

Недавно я включил Amazon S3 + CloudFront в качестве CDN для моего приложения rails. Чтобы использовать свойства шрифта и отображать их в Firefox или IE, я должен включить CORS в свой ведро S3.

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

Затем я использовал curl -I https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz, я получил:

HTTP/1.1 200 OK
x-amz-id-2: Ovs0D578kzW1J72ej0duCi17lnw+wZryGeTw722V2XOteXOC4RoThU8t+NcXksCb
x-amz-request-id: 52E934392E32679A
Date: Tue, 04 Jun 2013 02:34:50 GMT
Cache-Control: public, max-age=31557600
Content-Encoding: gzip
Expires: Wed, 04 Jun 2014 08:16:26 GMT
Last-Modified: Tue, 04 Jun 2013 02:16:26 GMT
ETag: "723791e0c993b691c442970e9718d001"
Accept-Ranges: bytes
Content-Type: text/javascript
Content-Length: 39140
Server: AmazonS3

Должен ли я видеть 'Access-Control-Allow-Origin' где-нибудь? Требуется ли S3 для обновления настроек CORS? Могу ли я форсировать устаревшие заголовки, если они их кэшируют?

Ответ 1

Попробуйте отправить заголовок Origin:

$ curl -v -H "Origin: http://example.com" -X GET https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz > /dev/null

Затем вывод должен отображать заголовки ответов CORS, которые вы ищете:

< Access-Control-Allow-Origin: http://example.com
< Access-Control-Allow-Methods: GET
< Access-Control-Allow-Credentials: true
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method

Дополнительную информацию о том, как отлаживать запросы CORS с помощью cURL, можно найти здесь: Как вы можете отлаживать запрос CORS с помощью cURL?

Обратите внимание, что существуют разные типы запросов CORS (простые и предполетные), хороший учебник о различиях можно найти здесь: http://www.html5rocks.com/en/tutorials/cors/

Надеюсь, это поможет!

Ответ 2

Попробуйте следующее:

  • Попробуйте указать имена доменов, к которым вы хотите разрешить доступ. S3 не нравится *.
  • CloudFront + S3 не обрабатывает конфигурацию CORS правильно из коробки. Ключ должен добавить строку запроса, содержащую имя ссылочного домена, и явно включить поддержку строк запроса в настройках распространения CloudFront.

Ответ 3

У вас есть несколько проблем с тестированием CORS.

  1. Ваша конфигурация CORS не имеет метода HEAD.
  2. У вашей команды curl нет заголовка -H.

Я могу получить ваши данные с помощью curl следующим образом. Однако они выбросили мусор на мой экран, потому что ваши данные сжаты в двоичном виде.

curl --request GET  https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz -H "http://google.com"

Ответ 4

Чтобы ответить на актуальный вопрос в заголовке:

Нет, S3, похоже, не требует времени для распространения настроек CORS. (по состоянию на 2019 г.)

Однако, если вы используете Chrome (и, возможно, другие), тогда настройки CORS могут кэшироваться браузером, поэтому вы не обязательно увидите ожидаемые изменения, если просто сделаете обычное обновление браузера. Вместо этого щелкните правой кнопкой мыши кнопку обновления и выберите "Очистить кэш и полная перезагрузка" (начиная с Chrome 73). После этого новые настройки CORS вступят в силу в течение <~ 5 секунд после внесения изменений в консоли AWS. (Это может быть намного быстрее, чем это. Не проверял.) Это относится к обычному ведру S3. Я не знаю, как CloudFront влияет на вещи.

(Я понимаю, что этому вопросу 6 лет, и, возможно, он связан с дополнительными техническими проблемами, на которые другие люди давно уже ответили, но когда вы ищете простой вопрос о времени распространения изменений CORS, этот вопрос возникает первым, поэтому я думаю, это заслуживает ответа, который обращается к этому.)