Какая категория запросов не будет проверяться в CORS?
DOM и браузер
В CORS не проверяются «простые запросы» (simple requests) — GET/HEAD/POST с определёнными заголовками и типами контента: для них браузер не делает preflight-запрос `OPTIONS`.
Простые запросы (без preflight)
Категория запросов, которые браузер отправляет сразу, без предварительного OPTIONS. Условия «простого» запроса:
- Метод: GET, HEAD или POST.
- Заголовки — только «безопасные» (Accept, Accept-Language, Content-Language, Content-Type с ограничениями).
- Content-Type — только
application/x-www-form-urlencoded,multipart/form-dataилиtext/plain.
// Простой запрос — без preflight
fetch('https://api.com/data'); // GET, без кастомных заголовковДля них браузер шлёт основной запрос сразу и проверяет заголовки CORS в ответе (но preflight OPTIONS не делает).
Сложные запросы (с preflight)
Требуют предварительного OPTIONS:
- Методы PUT, DELETE, PATCH.
- Кастомные заголовки (например,
Authorization, кастомные). Content-Type: application/json.
// Сложный — будет preflight OPTIONS
fetch('https://api.com/data', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
});Нюанс
«Простые запросы не проверяются preflight-ом» не значит «без CORS вообще»: браузер всё равно проверяет Access-Control-Allow-Origin в ответе. Просто не делает предварительный OPTIONS.
Коротко для собеседования
Preflight OPTIONS не делается для «простых запросов»: GET/HEAD/POST с безопасными заголовками и Content-Type из списка (x-www-form-urlencoded, multipart/form-data, text/plain). Сложные (PUT/DELETE/PATCH, кастомные заголовки, application/json) требуют preflight. При этом простые запросы всё равно проверяют Access-Control-Allow-Origin в ответе.