Какие CORS-заголовки важны на практике и как их применять?
DOM и браузер
Важные CORS-заголовки: `Access-Control-Allow-Origin` (разрешённый origin), `-Methods`, `-Headers`, `-Credentials`, `-Max-Age`. Их задаёт сервер в ответе.
Заголовки ответа
Access-Control-Allow-Origin
Разрешённый источник (главный):
Access-Control-Allow-Origin: https://app.com
# или * (публично, без credentials)Access-Control-Allow-Methods
Разрешённые методы (в ответе на preflight):
Access-Control-Allow-Methods: GET, POST, PUT, DELETEAccess-Control-Allow-Headers
Разрешённые заголовки запроса:
Access-Control-Allow-Headers: Content-Type, AuthorizationAccess-Control-Allow-Credentials
Разрешить cookie/credentials:
Access-Control-Allow-Credentials: trueПри этом Allow-Origin не может быть * — только конкретный origin.
Access-Control-Max-Age
Кеш результата preflight (чтобы не слать OPTIONS каждый раз):
Access-Control-Max-Age: 86400Access-Control-Expose-Headers
Какие заголовки ответа доступны JS-у клиента:
Access-Control-Expose-Headers: X-Total-CountЗаголовок запроса
- Origin — браузер добавляет автоматически (источник).
Практика применения
- Разрешать только доверенные origin (не
*для приватных API). - При credentials — конкретный origin.
- Обрабатывать preflight
OPTIONS(обычно middlewarecors).
Коротко для собеседования
Важные CORS-заголовки (ответ сервера): Access-Control-Allow-Origin (разрешённый источник), -Methods и -Headers (для preflight), -Credentials: true (cookie, тогда origin не *), -Max-Age (кеш preflight), -Expose-Headers (доступные клиенту заголовки). Браузер шлёт Origin. Разрешать только доверенные origin.