← Назад к вопросам

Что такое CORS?

2.0 Middle🔥 121 комментариев
#Сети и протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое CORS?

CORS (Cross-Origin Resource Sharing, или совместное использование ресурсов между разными источниками) — это механизм, использующий дополнительные HTTP-заголовки, чтобы дать веб-приложению, работающему на одном источнике (origin), разрешение на доступ к выбранным ресурсам с другого источника. Без CORS браузер по умолчанию запрещает такие запросы из-за политики Same-Origin Policy (SOP).

Зачем нужен CORS?

Same-Origin Policy — критически важная функция безопасности браузеров, которая предотвращает выполнение межсайтовых запросов к ресурсам с другого домена, протокола или порта без явного разрешения. Однако современные веб-приложения часто состоят из нескольких сервисов (например, фронтенд на example.com и API на api.example.com), и CORS позволяет безопасно управлять доступом между ними.

Как работает CORS?

Механизм CORS работает через дополнительные HTTP-заголовки, которые браузер автоматически добавляет к запросам, а сервер должен корректно их обрабатывать. Процесс включает два типа запросов:

  1. Простой запрос (Simple Request) — выполняется сразу, если метод (GET, POST, HEAD) и заголовки соответствуют критериям безопасности.
  2. Предварительный запрос (Preflight Request) — отправляется браузером перед основным запросом для методов, которые могут изменять данные (например, PUT, DELETE), или при наличии нестандартных заголовков. Это запрос типа OPTIONS, где сервер должен явно разрешить последующий запрос.

Ключевые заголовки CORS

Сервер управляет политикой CORS через следующие заголовки:

  • Access-Control-Allow-Origin — указывает, какие источники могут обращаться к ресурсу. Например:

    Access-Control-Allow-Origin: https://example.com
    

    Или для разрешения всем доменам:

    Access-Control-Allow-Origin: *
    
  • Access-Control-Allow-Methods — перечисляет разрешённые HTTP-методы (например, GET, POST, PUT).

  • Access-Control-Allow-Headers — список заголовков, которые могут быть использованы в фактическом запросе.

  • Access-Control-Allow-Credentials — если установлен в true, позволяет передавать куки и данные аутентификации.

Практический пример

Допустим, фронтенд на https://myapp.com делает запрос к API на https://api.service.com/users. Без CORS браузер заблокирует ответ. Чтобы разрешить доступ, сервер api.service.com должен включить заголовки CORS в ответ:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://myapp.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true

На стороне Node.js с Express это можно реализовать так:

const express = require('express');
const cors = require('cors');
const app = express();

// Разрешить запросы с определённого origin
const corsOptions = {
  origin: 'https://myapp.com',
  optionsSuccessStatus: 200,
  credentials: true
};

app.use(cors(corsOptions));

app.get('/users', (req, res) => {
  res.json({ users: ['Alice', 'Bob'] });
});

app.listen(3000);

Типичные проблемы и отладка

На практике CORS часто вызывает ошибки в консоли браузера, например:

Access to fetch at 'https://api.service.com/data' from origin 'https://myapp.com' has been blocked by CORS policy.

Решение обычно включает:

  • Проверку корректности заголовков Access-Control-Allow-* на сервере.
  • В случае с предварительными запросами — настройку обработки OPTIONS-метода.
  • Убеждение, что Access-Control-Allow-Credentials: true не конфликтует с Access-Control-Allow-Origin: *.

CORS в контексте DevOps

Для инженера DevOps понимание CORS важно при:

  • Настройке балансировщиков нагрузки (например, Nginx или AWS ALB) — может потребоваться добавить заголовки CORS на уровне прокси.
  • Развёртывании микросервисных архитектур — каждый сервис должен корректно настраивать политики доступа.
  • Настройке облачных сервисов (AWS S3, CloudFront) — где CORS настраивается через конфигурационные файлы или панели управления.

В целом, CORS — это не механизм защиты API, а средство контроля доступа в браузере. Защита от вредоносных запросов должна реализовываться на сервере через аутентификацию, валидацию и другие механизмы безопасности. Правильная настройка CORS обеспечивает гибкость и безопасность современных распределённых веб-приложений.

Что такое CORS? | PrepBro