Заголовок ответа Access-Control-Allow-Origin
применяется в механизме Cross-Origin Resource Sharing (CORS), чтобы дать возможность браузеру пользователя получать разрешения на доступ к ресурсам домена, отличном от того, с которого поступает запрос.
Опция «HTTP-заголовок Access-Control-Allow-Origin» передает в ответе браузеру заголовок Access-Control-Allow-Origin
и может использоваться:
- для защиты контента от загрузки на сторонних сайтах.
- для предотвращения появления ошибки «XMLHttpRequest cannot load http://domain.ru. No’Access-Control-Allow-Origin’ header is present on the requested resource».
Как работает CORS?
Например, пользователь, находящийся на сайте http://domain1.com
, открывает изображение, которое расположено на вашем сайте по адресу http://cdn-domain.com/image.jpg
.
В таком случае браузер пользователя отправляет на сервер домена http://cdn-domain.com/image.jpg
запрос, например, вида:
GET /image HTTP/1.1
Host: domain2.com
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://domain1.com/examples/access-control/test.html
Origin: http://domain1.com
В запросе важным является заголовок Origin
. Он сообщает серверу, что запрос отправлен с домена http://domain1.com.
Сервер домена http://cdn-domain.com/image.jpg
учитывает заголовок Origin
запроса и принимает запрос или отказывает в его обработке.
Если сервер принял запрос, в ответе браузеру будет отправлен заголовок Access-Control-Allow-Origin
, который позволит браузеру отобразить изображение для пользователя сайта http://domain1.com
.
Важно! Парматеры заголовка (в примере ниже: "*") зависят от заданых настроек на сервере. Подробнее об этом и о том, от чего зависит принял ли сервер запрос или отказал в обработке читайте ниже в инструкции по настройке.
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2020 00:23:53 GMT
Server: Apache/2.0.61
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
[XML Data]
Если сервер отказал в обработке запроса, ответ браузеру будет отправлен без заголовка Access-Control-Allow-Origin
и браузер не отобразит изображение для пользователя.
Настройка заголовка Access-Control-Allow-Origin
в личном кабинете
Раскройте «Дополнительные настройки» в настройках ресурса. Добавьте опцию «HTTP-заголовок Access-Control-Allow-Origin» из раздела «Безопасность».
В этой опции доступно три варианта настройки заголовка:
1. *, для всех доменов: отображение контента разрешено всем доменам.
В таком случае CDN в ответе браузеру передаст заголовок Access-Control-Allow-Origin
с параметром "*", и контент будет доступен для просмотра:
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2020 00:23:53 GMT
Server: Apache/2.0.61
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
2. "$http_origin", если источник указан ниже: отображение контента разрешено для тех доменов, которые указаны в поле настройки опции, в заголовке ответа передается домен, с которого пришел запрос:
При получении запроса CDN сверит значение заголовка запроса
Origin
с доменами, которые указаны для опции HTTP-заголовок Access-Control-Allow-Origin.
Если значение заголовка Origin
в запросе к серверу соответствует одному из указанных доменов, CDN добавит к ответу заголовок Access-Control-Allow-Origin
с доменом, с которого пришел запрос, и контент будет досупен для пользователя.
Если значение заголовка Origin
в запросе к серверу не соответствует одному из указанных в личном кабинете доменов, заголок Access-Control-Allow-Origin
добавлен не будет, и контент не отобразится.
Например, в настройках опции указан домен cdn-domain.com:
В таком случае, если запрос на ваш контент был отправлен с cdn-domain.com
, браузер пользователя получит ответ от сервера вида, и контент будет отображен:
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 00:23:53 GMT
Server: Apache/2.0.61
Access-Control-Allow-Origin: https://cdn-domain.com
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
Если запрос на ваш контент был отправлен не с домена cdn-domain.com
заголовок Access-Control-Allow-Origin
в ответ браузеру добавлен не будет, и контент отображен не будет.
3. "$http_origin", для всех доменов: отображение контента разрешено для всех доменов, в заголовке ответа передается домен, с которого пришел запрос.
Этот вариант опции аналогичен первому варианту, т.к. контент досупен всем доменам, однако отличается тем, что в параметре заголовка Access-Control-Allow-Origin
будет передаваться домен, с которого был отправлен запрос.
Так, например, если запрос на ваш контент был отправлен с домена cdn-domain.com
, он будет передан браузеру в заголовке ответа Access-Control-Allow-Origin
, и контент будет отображен:
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 00:23:53 GMT
Server: Apache/2.0.61
Access-Control-Allow-Origin: https://cdn-domain.com
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
Такой вариант использования может быть необходим, например, если для настройки определенных фильтраций на сервере не подходит параметр "*".
Настройки опции будут применены ко всем файлам, передающимся через CDN.
Правила
Настройте заголовок только для определенных файлов, используя функцию «Правила».
Перейдите в «Дополнительные настройки» -> раздел «Безопасность» -> опция «HTTP-заголовок Access-Control-Allow-Origin».
Если опция не добавлена в список, CDN использует настройки ресурса для опции «HTTP-заголовок Access-Control-Allow-Origin».
Если опция добавлена в список, но не активирована, заголовок Access-Control-Allow-Origin не добавляется.