Skip to content
На этой странице:

Управление доступом посредством CORS

Совместное использование ресурсов между разными источниками (Cross-Origin Resource Sharing) — стандарт, используемый в браузерах, который позволяет веб-серверам определять какие сторонние веб-сервисы (веб-страницы) могут делать запросы к ресурсам этого сервера. В данном случае сторонний веб-сервис — это любой, отличающийся от запрашиваемого протоколом, доменом или портом. Доступ предоставляется по специализированным запросам. Принимающий запрос интернет-ресурс содержит список доверенных источников, которым разрешен доступ к объектам. Доступ получают те страницы-источники запроса, которые входят в список доверенных источников. Для предоставления доступа всем сторонним интернет-страницам используется маска *.

Принцип работы CORS

Стандарт Cross-Origin Resource Sharing работает следующим образом:

  1. Браузер делает предварительный запрос с помощью метода OPTIONS. Предварительный запрос — это проверка возможности запроса к объекту.
  2. На основе ответа на предварительный запрос выполняется основной запрос.

Предварительный запрос

Ответ сервера на предварительный запрос должен сообщать какие запросы из разных источников сервер готов принять с URL-адреса клиента. Заголовки ответа сервера должны содержать Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers. Например, используя метод OPTIONS, клиент перед отправкой основного запроса запрашивает у сервера, разрешен ли ему метод DELETE:

http
OPTIONS /resource/foo
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: Origin, X-Requested-With
Origin: https://www.example-example.ru

Если сервер позволяет это, он ответит на предварительный запрос заголовком Access-Control-Allow-Methods ответа, где присутствует DELETE:

http
HTTP/1.1 204 No Content
Connection: keep-alive
Access-Control-Allow-Origin: https://www.example-example.ru
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Allow-Headers: Origin, X-Requested-With

Основной запрос

Создавая перекрестный HTTP-запрос, браузер клиента объявляет в разделе запроса Origin домен веб-страницы, инициирующей запрос.

В примере, использующем методы CORS, страница https://website.ru/page.html запрашивает данные со страницы https://server.ru/info.

http
GET /info HTTP/1.1
    Host: server.ru
    Origin: website.ru
  • Если сервер разрешает странице-источнику запроса доступ к данным с домена, в его ответе на запрос появится строка Access-Control-Allow-Origin с именем объявленного домена:

    Access-Control-Allow-Origin: https://website.ru

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

    Access-Control-Allow-Origin: https://website.ru https://website2.ru https://website3.ru

  • Если на сервере разрешен доступ к ресурсу страницам любого стороннего домена, в ответе будет указана маска *.

    Access-Control-Allow-Origin: *

  • Если сервер, на который запрошен доступ, не добавит в ответ указанную строку, браузер клиента вместо данных файла info вернет код ошибки.

Настройка CORS-конфигурации бакета

Для каждого бакета создается отдельная CORS-конфигурация, состоящая из правил. Управление CORS-конфигурациями осуществляется посредством консоли управления CloudMTS или S3 API.