Какая категория запросов не будет проверяться в CORS?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое CORS и его базовые принципы
CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, который позволяет серверу явно указывать, какие внешние домены могут обращаться к его ресурсам через браузер. Он работает через HTTP-заголовки и применим только в браузерной среде. Важно понимать, что CORS — это именно ограничение браузера, а не сервера.
Категории запросов, НЕ проверяемые CORS
Есть два основных типа запросов, которые не вызывают проверку CORS браузером:
1. "Простые" (Simple) запросы
Браузер выполняет их сразу, без предварительной проверки методом OPTIONS (preflight). Условия для "простого" запроса:
- Метод: GET, HEAD или POST
- Заголовки только из стандартного набора:
AcceptAccept-LanguageContent-LanguageContent-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 реализован в браузерах для защиты пользователей. Другие клиенты не имеют доступа к кукам/учётным данным пользователя в том же контексте, поэтому в такой защите меньше необходимости.
Практическое значение
- Разработка API: если ваш API будет использоваться только серверными приложениями — CORS можно игнорировать
- Отладка: при проблемах с CORS в браузере проверьте запрос через curl — он всегда отработает
- Безопасность: помните, что CORS не заменяет аутентификацию и авторизацию на сервере
Вывод
Браузер не проверяет CORS для:
- "Простых" запросов (но проверяет ответ!)
- Любых запросов вне браузерной среды
Это знание критически важно при проектировании API и отладке междоменных запросов. Всегда учитывайте, что CORS — это защита конечного пользователя в браузере, а не универсальный механизм безопасности API.