Нужно ли 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 ответа:
Попробуйте отправить заголовок 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/
Надеюсь, это поможет!
Попробуйте вот это:
- попробуйте ограничить доменные имена, к которым вы хотите разрешить доступ. S3 не любит
*
.- CloudFront + S3 неправильно обрабатывает конфигурацию CORS из коробки. Клудж должен добавить строку запроса, содержащую имя ссылающегося домена, и явно включить поддержку строк запроса в настройках распространения CloudFront.
У вас есть несколько проблем с тем, как вы тестируете CORS.
- ваша конфигурация CORS не имеет метода HEAD.
- ваша команда 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"