# О Cross-Origin Resource Sharing (CORS)

### Что такое CORS

Механизм безопасности для веб-сайтов. Он дает ресурсу установить правила о том, кто может запрашивать их данные. Это как владелец клуба, который распределяет браслеты на входе. Если у вас есть правильный браслет (разрешение от веб-сайта), вы можете войти. Если у вас нет браслета, то вас не пустят.

CORS создан в том числе для защиты от междоменных атак (CSRF) или других видов, эксплуатирующих политику одного источника (same-origin policy).

### Как работает CORS&#x20;

CORS реализован на стороне сервера с помощью установки специальных HTTP-заголовков. Давайте разберем процесс работы механизма шаг за шагом.&#x20;

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

Когда наш браузер хочет получить данные с сервера другого домена, он сначала отправляет предварительный запрос. По сути это проверка разрешения, в которой браузер спрашивает сервер другого домена: «Могу ли я сделать запрос с таким методом и такими заголовками?»

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

Если сервер настроен с CORS, он ответит на предварительный запрос, направив обратно соответствующие механизму заголовки. Например, заголовок `Access-Control-Allow-Origin` → может содержать домен, с которого пришел запрос, указывая браузеру, что запросы с этого источника разрешены.

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

Если сервер дал разрешение в виде заголовков CORS → браузер выполняет основной запрос, ожидая получить данные. Тут сервер снова включает заголовки CORS в свой ответ, чтобы браузер мог подтвердить разрешение и обработать данные.

4. Управление запросами с учетными данными

Если запрос требует проверить подлинность, как в случае с использованием кук или токенов аутентификации, заголовок `Access-Control-Allow-Credentials` должен быть установлен в `true`, и заголовок `Access-Control-Allow-Origin` не может быть `*`.

Примеры HTTP-заголовков, которые сервер может использовать для реализации CORS:

* `Access-Control-Allow-Origin: http://www.example.com`
* `Access-Control-Allow-Methods: GET, POST, PUT`
* `Access-Control-Allow-Headers: Content-Type, Authorization`
* `Access-Control-Allow-Credentials: true`

Благодаря этим заголовкам, браузер знает, какие именно действия разрешены и обрабатывает ответ по всем внедренным правилам. А если заголовки раскрывают ограничения или отсутствуют → браузер блокирует ответ для безопасности.&#x20;

### Как CORS помогает безопасности

1. Без CORS браузеры ограничивают доступ к ресурсам в соответствии с политикой одного источника. Это сокращает риски атак XSS и CSRF.
2. С ним разработчики могут точно определить, какие другие сайты могут запрашивать их ресурсы.&#x20;
3. Любой запрос к ресурсам с другого источника, который может влиять на данные, сначала требует предварительного запроса (preflight request). Эта мера также помогает предотвратить, например, CSRF.&#x20;
4. С CORS разработчики могут предотвратить чтение доменами-источниками информации, получаемой в результате запросов. Это обеспечивает дополнительный уровень защиты данных пользователя.
5. CORS — это стандарт, который поддерживают большинство веб-браузеров. И, как стандарт, этот механизм обеспечивает единообразный и надежный способ управления кросс-доменными запросами.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://notes.kraken-security.ru/kraken/krupicy-znanii/obshie-stati/o-cross-origin-resource-sharing-cors.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
