Использование вебшрифтов с серверов Амазона

07 June 2015 #amazon#web#design

Когда писал статью Amazon S3: кеширование страниц веб-сайта затронул вопрос Cross-Origin Resource Sharing, ошибочно приняв его за решение проблемы с кешированием. И вот сегодня мне пришлось чуть более подробно разобраться с CORS.

Дело в том, что я решил перенести все свои ресурсы сайта (стили, скрипты, изображения, в том числе и шрифты) на сервера Amazon Cloudfront. И дело в том, что после переноса, браузеры стали мне показывать ошибку загрузки файлов шрифта из-за неутановленного заголовка запроса.

Оказалось, что дело именно в разрешениях, что задаются с помощью CORS. Решение нашлось довольно быстро: заходим через веб-интерфейс в консоль управления, выбираем нашу корзину, в которой хранятся все данные для Cloudfront и как описывал в выше упоминавшейся статье, вносим изменения в CORS-конфигурацию:

<CORSConfiguration>
  <CORSRule>
	<AllowedOrigin>http://mydomain.com</AllowedOrigin>
	<AllowedMethod>GET</AllowedMethod>
	<MaxAgeSeconds>3000</MaxAgeSeconds>
	<AllowedHeader>Content-*</AllowedHeader>
	<AllowedHeader>Host</AllowedHeader>
  </CORSRule>
  <CORSRule>
	<AllowedOrigin>http://*.mydomain.com</AllowedOrigin>
	<AllowedMethod>GET</AllowedMethod>
	<MaxAgeSeconds>3000</MaxAgeSeconds>
	<AllowedHeader>Content-*</AllowedHeader>
	<AllowedHeader>Host</AllowedHeader>
  </CORSRule>
</CORSConfiguration>

После чего в той же консоли нужно перейти в управление Cloudfront. Там выбрать “Distribution Settings” и вкладку “Behaviors”. Минимум одна группа поведения там уже должна присутствовать, поэтому выбираем ее и переходим к ее изменению, нажав кнопку Edit. Для параметра “Forward Headers” меняем значение с “None (Improves Caching)” на “Whitelist” и затем в секции “Whitelist Headers” выбираем Origin:

Behavior

Теперь только остается провести инвалидацию для загружанных ранее файлов шрифтов. Сделать это можно так же через веб-интерфейс, в разделе Cloudfront, вкладка Invalidations. Через 10-15 минут шрифты будут доступны для загрузки и не будут блокироваться политикой браузеров.