Skip to content

Обзор

CORS (Cross-Origin Resource Sharing) — это механизм безопасности, который используется для контроля доступа к ресурсам из другого источника. В Object Storage CORS необходим для обеспечения безопасного доступа к объектам данных из веб-приложений, размещенных на других доменах.

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

Обычно браузеры блокируют запросы, инициированные к ресурсам на других доменах. Такое ограничение называется Same-Origin Policy (политика одного источника). Согласно этой политике, веб-страница может свободно взаимодействовать только с ресурсами с аналогичным доменом, портом и протоколом. Например, страница на https://example.comможет запрашивать данные только с https://example.com. Если эта страница запросит данные с другого домена (например, https://api.anotherdomain.com), браузер заблокирует такой запрос.

Механизм CORS позволяет явно указать, какие внешние домены имеют право запрашивать ресурсы. Для этого используются специальные HTTP-заголовки. Перед тем, как выполнить кросс-доменный запрос, браузер отправляет на сервер предварительный (preflight) запрос с информацией о домене источника, используемом HTTP-методе и заголовках будущего запроса. Если данные, переданные в preflight-запросе, соответствуют правилам CORS, сервер разрешает кросс-доменный запрос.

Структура конфигурации CORS

Конфигурация CORS устанавливается на уровне бакета. Она представляет собой набор правил в формате XML или JSON. Готовый файл с правилами можно загрузить с помощью утилиты AWS CLI.

В правилах указываются:

  • разрешенные источники;
  • разрешенные HTTP-методы (GET, POST и др.);
  • разрешенные HTTP-заголовки.
Пример конфигурации в формате XML
xml
<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>https://www.example.com</AllowedOrigin>
    <AllowedOrigin>https://app.example.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedHeader>Authorization</AllowedHeader>
    <AllowedHeader>Content-Type</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <MaxAgeSeconds>3600</MaxAgeSeconds>
  </CORSRule>
</CORSConfiguration>
Пример конфигурации в формате XML
json
{
    "CORSRules": [
        {
            "AllowedOrigins": [
                "https://www.example.com",
                "https://app.example.com"
            ],
            "AllowedMethods": ["GET", "PUT", "POST", "DELETE"],
            "AllowedHeaders": ["Authorization", "Content-Type"],
            "ExposeHeaders": ["ETag"],
            "MaxAgeSeconds": 3600
        }
    ]
}

В состав конфигурации могут входить следующие элементы:

ЭлементОписаниеПример
AllowedOriginsРазрешенные источники"AllowedOrigins": ["https://www.example.com"]
AllowedMethodsРазрешенные HTTP-методы"AllowedMethods": ["GET", "PUT", "POST", "DELETE"]
AllowedHeadersРазрешенные HTTP-заголовки"AllowedHeaders": ["Authorization", "Content-Type"]
ExposeHeadersЗаголовки, доступные клиентуExposeHeaders": ["ETag"]
MaxAgeSecondsВремя кэширования preflight-ответов"MaxAgeSeconds": 3600 //1 час

Особенности и ограничения

  • Конфигурация CORS должна включать не более 100 правил.
  • Размер файла конфигурации не должен превышать 64КБ.

Проверка запросов

Object Storage проверяет каждый запрос из браузера на соответствие настройкам CORS. Запрос признается соответствующим, если одновременно выполняются условия:

  • значение заголовка Origin совпадает с одним из источников, указанных в параметре AllowedOrigins;
  • используется один из методов, перечисленных в параметре AllowedMethods;
  • значение заголовка Access-Control-Request-Headers совпадает со значением параметра AllowedHeaders.