Какие знаешь CORS заголовки

Ответ

CORS (Cross-Origin Resource Sharing) — механизм для безопасного междоменного взаимодействия. Основные заголовки:

Запрос (Request):

  • Origin — указывает домен, с которого пришел запрос (например, Origin: https://example.com).

Ответ (Response):

  • Access-Control-Allow-Origin — разрешенные домены (* для всех или конкретный домен).
  • Access-Control-Allow-Methods — разрешенные HTTP-методы (GET, POST и т.д.).
  • Access-Control-Allow-Headers — разрешенные заголовки запроса.
  • Access-Control-Allow-Credentials — разрешает передачу кук/авторизации (true/false).
  • Access-Control-Expose-Headers — заголовки, доступные клиенту.
  • Access-Control-Max-Age — время кеширования preflight-запроса (в секундах).

Пример ответа сервера:

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true

Ответ 18+ 🔞

А, вот эта хуйня с CORS! Ну что за пиздец, каждый раз как в первый раз. Слушай сюда, сейчас разжую.

Представь, что твой браузер — это такой ебучий параноик-охранник на проходной. Сидит он на frontend.com и думает: «Хм, скрипт хочет сходить на api.backend.com... А не пиздит ли он?» И начинает этот ёбаный кросс-доменный допрос, это и есть CORS.

Когда скрипт лезет куда не надо (Request), он кричит:

  • Origin: https://frontend.com — «Я с этой хаты, честно-пречестно!»

А сервер (api.backend.com), если он не конченный мудак, должен ответить списком разрешений:

Ответ сервера (Response) — это как пропуск:

  • Access-Control-Allow-Origin: https://frontend.com — «Ладно, пускай этот конкретный сайт заходит». Можно и * написать, но это как кричать «Проходите, все, кому не лень!» — для серьёзных дел не годится.
  • Access-Control-Allow-Methods: GET, POST, OPTIONS — «Можешь вот этими методами тыкать».
  • Access-Control-Allow-Headers: Content-Type, Authorization — «И вот такие бумажки (заголовки) в запросе принимаю».
  • Access-Control-Allow-Credentials: true — Это самое интересное! Это как разрешить проходить с ебучей корпоративной кружкой (куками, авторизацией). Но если это true, то в Allow-Origin нельзя писать *, только конкретный домен! Иначе охранник (браузер) скажет: «Ну ты, блядь, совсем? И куки тащить, и всем разрешать? Иди нахуй».
  • Access-Control-Expose-Headers — «Вот эти служебные заголовки из моего ответа можешь посмотреть, остальные — пошёл нахуй».
  • Access-Control-Max-Age: 86400 — «Запросы на предварительную проверку (preflight) можешь не слать каждый раз, кешируй на сутки».

А, ну и пример, как это выглядит, когда сервер не мудак и настроил всё правильно:

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true

Вот и вся магия. А если не настроил — получаешь в консоли браузера ошибку, от которой волосы дыбом, и начинаешь гуглить, материться и проклинать тот день, когда решил стать фронтендером.