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

Какая категория запросов не будет проверяться в CORS?

2.0 Middle🔥 222 комментариев
#Браузер и сетевые технологии

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

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

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

Что такое CORS и его базовые принципы

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

Категории запросов, НЕ проверяемые CORS

Есть два основных типа запросов, которые не вызывают проверку CORS браузером:

1. "Простые" (Simple) запросы

Браузер выполняет их сразу, без предварительной проверки методом OPTIONS (preflight). Условия для "простого" запроса:

  • Метод: GET, HEAD или POST
  • Заголовки только из стандартного набора:
    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type (но только со значениями application/x-www-form-urlencoded, multipart/form-data, text/plain)

Пример такого запроса (отправляется сразу):

// Отправка формы с enctype="text/plain"
fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain'
  },
  body: 'some text'
});

НО важное уточение: хотя preflight не выполняется, браузер всё равно проверит ответ сервера на наличие заголовка Access-Control-Allow-Origin. Если его нет или домен не совпадает, ответ будет заблокирован.

2. Запросы вне браузера

CORS работает только в браузерах. Любые другие клиенты не проверяют CORS:

// Node.js-приложение — CORS НЕ проверяется
const https = require('https');
const req = https.request('https://api.example.com/data', {
  method: 'PUT',
  headers: {
    'X-Custom-Header': 'value',
    'Content-Type': 'application/json'
  }
});
// Запрос выполнится без проверки CORS

Другие примеры без проверки CORS:

  • Мобильные приложения (Android/iOS)
  • Десктопные приложения
  • Серверные запросы (Node.js, Python, PHP)
  • Тестирование через curl, Postman

Почему именно эти случаи?

Механизм preflight запроса

Браузер отправляет OPTIONS-запрос перед "непростыми" запросами для проверки безопасности. Но если запрос соответствует критериям "простого" — эта проверка пропускается.

// Этот запрос ВЫЗОВЕТ preflight из-за кастомного заголовка
fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': 'secret-key' // Кастомный заголовок!
  }
});
// Браузер сначала отправит OPTIONS запрос

Архитектурное ограничение

CORS реализован в браузерах для защиты пользователей. Другие клиенты не имеют доступа к кукам/учётным данным пользователя в том же контексте, поэтому в такой защите меньше необходимости.

Практическое значение

  1. Разработка API: если ваш API будет использоваться только серверными приложениями — CORS можно игнорировать
  2. Отладка: при проблемах с CORS в браузере проверьте запрос через curl — он всегда отработает
  3. Безопасность: помните, что CORS не заменяет аутентификацию и авторизацию на сервере

Вывод

Браузер не проверяет CORS для:

  • "Простых" запросов (но проверяет ответ!)
  • Любых запросов вне браузерной среды

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