2015-04-10 8 views
1

Я пытаюсь создать приложение, в котором пользователи загружают контент в своих браузерах в ведро S3 через CloudFront. Я включил CORS в ведро S3 и установил, что AllowedOrigin установлен в *. Я могу успешно загрузить контент из браузера в ведро S3, чтобы я знал, что CORS на S3 настроен правильно. Теперь я пытаюсь сделать то же самое с браузером -> CloudFront -> S3. CloudFront всегда отклоняет запрос метода перед полетом OPTIONS с запрещенным ответом 403.AWS CloudFront CORS Support

Я следующие опции включены на CloudFront:

  • Разрешенные методы HTTP: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
  • БелОГО заголовков: Access-Control-Request-Headers,
  • Access-Control-Request-Method, Origin OPTIONS запросы отключены из "методы кэшированных HTTP"

CloudFront по-видимому, теперь поддерживает CORS, но имеет кто-нибудь получил его для HTTP-запроса метода OPTIONS? Я пробовал просить об этом на AWS forums, но никаких ответов.

ответ

0

Попробуйте добавить псевдоним CNAME для своего облачного домена?

После настройки псевдонима CNAME вы можете установить файлы cookie в базовом домене, после чего вы сможете передать свой файл cookie.

Давайте соберем больше деталей к нему в случае, если люди хотят знать, что будет следующий шаг, давайте использовать следующий пример: -

  1. Вы разрабатываете на my.fancy.site.mydomain. ком
  2. вашего CloudFront CNAME псевдоним content.mydomain.com
  3. Убедитесь, что вы установили ваши CloudFront подписали кук .mydomain.com от вашей фантазии приложения
  4. С этого момента вы можете передать cookie для CF.
  5. Один быстрый способ проверить, правильно ли настроен ваш файл cookie, попытаться получить URL-адрес вашего ресурса и прямо указать URL-адрес в браузере. Если cookie установлен правильно, вы сможете получить доступ к файлу напрямую.

Если вы используете javascript для получения активов cdn, убедитесь, что в вашем JS-коде вам необходимо передать параметрCredentials, или он не будет работать. Например, если вы используете JQuery, то вам нужно что-то вроде следующего: -

$.ajax({ 
    url: a_cross_domain_url, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

И если запрос будет успешным, вы должны получить заголовок ответа от CloudFront с «Access-Control-бла-бла» ,

Надеюсь, что это поможет людям, если они ищут этот ответ.

+0

Спасибо за ответ, но я не думаю, что это поможет , Как я уже сказал в вопросе, я могу успешно извлечь файл непосредственно из подписанного URL-адреса S3, поэтому я не думаю, что это проблема проверки подлинности (т. Е. Файлы cookie или подписанный URL-адрес). Проблема в том, что, когда CloudFront находится посередине, а браузер выполняет запрос CORS OPTION, CloudFront всегда отрицает это. – ravishi

0

Я нашел очень похожую проблему. Распределение CloudFront не отправляло информацию заголовка на S3.Вы можете проверить это легко с помощью:

curl -i -H "Origin: http://YOUR-SITE-URL" http://S3-or-CLOUDFRONT-URL | grep Access 

Если у вас есть такая же проблема, вы можете увидеть мое решение здесь:

AWS S3 + CloudFront gives CORS errors when serving images from browser cache

Смежные вопросы