Я получаю следующую ошибку в нескольких браузерах Chrome, но не во всех. Не совсем уверен, в чем проблема на данный момент.
Шрифт из источника « https://ABCDEFG.cloudfront.net » заблокирован для загрузки политикой общего доступа к ресурсам разных источников: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Поэтому происхождение « https://sub.domain.com » не разрешено.
У меня есть следующая конфигурация CORS на S3
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedHeader>*</AllowedHeader>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
Запрос
Remote Address:1.2.3.4:443
Request URL:https://abcdefg.cloudfront.net/folder/path/icons-f10eba064933db447695cf85b06f7df3.woff
Request Method:GET
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:abcdefg.cloudfront.net
Origin:https://sub.domain.com
Pragma:no-cache
Referer:https://abcdefg.cloudfront.net/folder/path/icons-e283e9c896b17f5fb5717f7c9f6b05eb.css
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36
Все остальные запросы из Cloudfront / S3 работают правильно, включая файлы JS.
amazon-web-services
amazon-s3
cors
amazon-cloudfront
Даллас Кларк
источник
источник
Ответы:
Добавьте это правило в ваш .htaccess
даже лучше, как предлагает @david thomas, вы можете использовать определенное значение домена, например
источник
Header set Access-Control-Allow-Origin "*"
? СпасибоAccess-Control-Allow-Origin "*"
это потенциально небезопасно, так как открывает домен для доступа к javascript из любого домена. Вместо этого следует использовать конкретное значение домена, например,Access-Control-Allow-Origin "http://example1.com"
см. Также stackoverflow.com/a/10636765/583715 для хорошего объяснения.В Chrome с ~ сентября / октября 2014 г. шрифты подвергаются тем же проверкам CORS, что и Firefox: https://code.google.com/p/chromium/issues/detail?id=286681 . Об этом есть обсуждение в https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/blink-dev/TT9D5-Zfnzw
Учитывая, что для шрифтов браузер может выполнить предварительную проверку , тогда вашей политике S3 также необходим заголовок запроса cors . Вы можете проверить свою страницу, скажем, Safari (которая в настоящее время не выполняет проверку шрифтов в CORS) и Firefox (что делает), чтобы дважды проверить, что это описанная проблема.
См. Ответы о переполнении стека в Amazon S3 CORS (кросс-исходный общий доступ к ресурсам) и междоменная загрузка шрифтов Firefox для получения подробной информации о Amazon S3 CORS.
В целом, потому что это относится только к Firefox, поэтому может помочь в поиске Firefox, а не Chrome.
источник
Я смог решить эту проблему, просто добавив
<AllowedMethod>HEAD</AllowedMethod>
в политику CORS S3 Bucket.Пример:
источник
<AllowedMethod>HEAD</AllowedMethod>
к своей политике CORS на ведре, и это все еще не работает.Nginx:
AWS S3:
http://schock.net/articles/2013/07/03/hosting-web-fonts-on-a-cdn-youre-going-to-need-some-cors/
источник
26 июня 2014 года AWS выпустила корректное поведение Vary: Origin в CloudFront, так что теперь вы просто
Установите конфигурацию CORS для вашей корзины S3:
В CloudFront -> Распределение -> Поведения для этого источника используйте параметр «Прямые заголовки: белый список» и белый список заголовка «Источник».
Подождите ~ 20 минут, пока CloudFront распространит новое правило
Теперь ваш дистрибутив CloudFront должен кэшировать разные ответы (с соответствующими заголовками CORS) для разных клиентских заголовков Origin.
источник
Единственное, что сработало для меня (вероятно, потому что у меня были несоответствия с использованием www.):
Вставьте это в ваш файл .htaccess:
http://ce3wiki.theturninggate.net/doku.php?id=cross-domain_issues_broken_web_fonts
источник
У меня была такая же проблема, и эта ссылка дала мне решение:
http://www.holovaty.com/writing/cors-ie-cloudfront/
Краткая версия этого:
Примечание. Это уже было сделано в исходном вопросе.
Примечание. Предоставленный код не очень безопасен, более подробную информацию см. На связанной странице.
Обновление вашего облачного фронта обновится, что займет около 10 минут. После этого все должно быть хорошо, вы можете проверить, проверив, что сообщения об ошибках, связанные с CORS, пропали из браузера.
источник
Для тех, кто использует продукты Microsoft с файлом web.config:
Объедините это с вашим web.config.
Если у вас нет разрешения на редактирование web.config, добавьте эту строку в свой код на стороне сервера.
источник
Существует хорошая рецензия здесь .
Настройка этого в nginx / apache - ошибка.
Если вы используете хостинговую компанию, вы не можете настроить преимущество.
Если вы используете Docker, приложение должно быть автономным.
Обратите внимание, что некоторые примеры используют,
connectHandlers
но это только устанавливает заголовки в документе. ИспользованиеrawConnectHandlers
относится ко всем активам (fonts / css / etc).Это было бы хорошим временем, чтобы взглянуть на политику браузера, такую как создание кадров и т. Д.
источник
Просто добавьте использование origin в вашем, если вы используете node.js в качестве сервера ...
источник
Рабочее решение для Heroku здесь http://kennethjiang.blogspot.com/2014/07/set-up-cors-in-cloudfront-for-custom.html (цитаты следуют):
Ниже точно, что вы можете сделать, если вы запускаете приложение Rails в Heroku и используете Cloudfront в качестве CDN. Он был протестирован на Ruby 2.1 + Rails 4, стек Heroku Cedar.
Добавьте HTTP-заголовки CORS (Access-Control- *) к ресурсам шрифта.
font_assets
в Gemfile.bundle install
config.font_assets.origin = '*'
вconfig/application.rb
. Если вы хотите более детальный контроль, вы можете добавить разные значения источника в разные среды, например,config/config/environments/production.rb
curl -I http://localhost:3000/assets/your-custom-font.ttf
Настройте Cloudfront для пересылки HTTP-заголовков CORS
В Cloudfront выберите свой дистрибутив, на вкладке «поведение» выберите и отредактируйте запись, которая контролирует доставку ваших шрифтов (для большинства простых приложений Rails у вас есть только 1 запись здесь). Измените заголовки пересылки с «Нет» на «Пока». И добавьте следующие заголовки в белый список:
Сохраните это и все!
Предупреждение: я обнаружил, что иногда Firefox не обновляет шрифты, даже если ошибка CORS исчезла. В этом случае продолжайте обновлять страницу несколько раз, чтобы убедить Firefox, что вы действительно полны решимости.
источник