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

3 9

3 ответа:

Попробуйте отправить заголовок 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/

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

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

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

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