Нужно ли 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? Могу ли я заставить заголовки с истекающим сроком действия, если они кэшируются?


person Daiwei    schedule 04.06.2013    source источник
comment
Убедитесь, что вы устранили эти проблемы, если вы не видите, что CORS вступает в силу. docs.aws.amazon.com/AmazonS3/latest/dev/ В идеале это не должно занимать слишком много времени. Я видел, что это заняло около нескольких минут раньше.   -  person Keshi    schedule 23.07.2013
comment
@Keshi, спасибо, ссылка помогла... Я не знал, что заголовок Origin в вашем запросе должен совпадать хотя бы с одним из элементов AllowedOrigin в указанном CORSRule, чтобы он отображался в заголовке... да :faceslap:   -  person CrandellWS    schedule 02.11.2018


Ответы (4)


Попробуйте отправить заголовок 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, можно найти здесь: How можно ли отлаживать запрос CORS с помощью cURL?

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

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

person Foolish Brilliance    schedule 30.07.2013

Попробуйте это:

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

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

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

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

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

person thund    schedule 18.04.2019
comment
Какова ваша ссылка на 5 секунд? - person Zulu; 23.06.2019
comment
@Zulu: я измерил это. Я могу внести изменения в одну вкладку браузера, а затем сразу же переключиться на другую и выполнить жесткую перезагрузку, чтобы проверить ее, и изменения уже распространились. Этот процесс занимает у меня около 5 секунд. Я не пытался измерять его ниже этого разрешения. Мои ведра — us-east-1, и я тестирую их в SF Bay Area. - person thund; 23.06.2019

У вас есть несколько проблем с тем, как вы тестируете 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"
person Shu    schedule 13.08.2013