
Axios позволяет выполнять HTTP-запросы из браузера и Node.js, обеспечивая простую работу с промисами. withCredentials – это параметр, который управляет отправкой куки и других учетных данных при кросс-доменных запросах. Без его включения браузер блокирует передачу таких данных, даже если сервер настроен на их прием.
При использовании с withCredentials: true Axios добавляет к запросу все соответствующие куки и заголовки авторизации. Это важно для приложений с аутентификацией на сторонних API или при работе с микросервисной архитектурой, где фронтенд и бэкенд находятся на разных доменах.
Для корректной работы необходимо настроить серверную часть. Заголовки CORS должны включать Access-Control-Allow-Credentials: true, а Access-Control-Allow-Origin не может быть установлен в ‘*’. Несоблюдение этих правил приведет к отказу браузера в передаче учетных данных.
Использование withCredentials упрощает управление сессиями и авторизацией на клиенте, но требует точного согласования настроек сервера и фронтенда. Без этого возможны ошибки при отправке куки и отказ в доступе к защищенным ресурсам.
Когда нужно использовать withCredentials в запросах Axios
Параметр withCredentials активируется в тех случаях, когда требуется передача учетных данных между клиентом и сервером на разных доменах. Он контролирует отправку куки, HTTP-авторизации и сертификатов TLS.
Основные сценарии использования:
- Аутентификация через сторонние API, где токены или сессии хранятся в куки.
- Взаимодействие с микросервисами, расположенными на разных поддоменах или доменах.
- Поддержка сессий в веб-приложениях, где фронтенд и бэкенд разделены по доменам.
Рекомендации по применению:
- Установить withCredentials: true в конфигурации Axios для конкретного запроса или глобально для всех запросов.
- Убедиться, что сервер возвращает заголовок Access-Control-Allow-Credentials: true и не использует ‘*’ в Access-Control-Allow-Origin.
- Проверять отправку и получение куки через инструменты разработчика, чтобы исключить блокировку браузером.
Использование withCredentials оправдано только при необходимости передачи учетных данных. Для простых запросов к открытым API его включение не требуется и может вызвать дополнительные ошибки CORS.
Как включить передачу куки с помощью withCredentials
Для отправки куки в запросах Axios необходимо установить параметр withCredentials в значение true. Это можно сделать как для отдельного запроса, так и глобально для всех запросов Axios.
Пример настройки для одного запроса:
axios.get(‘https://api.example.com/data’, { withCredentials: true })
Глобальная настройка применяется через конфигурацию экземпляра Axios:
const instance = axios.create({
withCredentials: true,
baseURL: ‘https://api.example.com’
});
Передача куки корректно работает только если сервер возвращает заголовок Access-Control-Allow-Credentials: true и устанавливает конкретный домен в Access-Control-Allow-Origin. Использование ‘*’ приведет к блокировке куки браузером.
После включения с withCredentials браузер автоматически добавляет все подходящие куки к запросу, включая HTTP-only и сессионные. Это обеспечивает сохранение авторизации и состояния сессии между фронтендом и бэкендом.
Разница между запросами с withCredentials и без него

Параметр withCredentials определяет, будут ли отправляться куки и другие учетные данные при кросс-доменных запросах. Без него браузер блокирует передачу куки, даже если сервер настроен на их прием. Это влияет на работу аутентификации и сохранение сессий.
Ключевые различия удобно отобразить в таблице:
| Свойство | С withCredentials | Без withCredentials |
|---|---|---|
| Отправка куки | Автоматическая, включая HTTP-only и сессионные | Не отправляется при кросс-доменных запросах |
| Передача заголовков авторизации | Включается | Не включается для кросс-доменных запросов |
| Работа с сессиями | Сессия сохраняется между запросами | Сессия теряется при каждом запросе |
| Требования к серверу | Access-Control-Allow-Credentials: true, конкретный домен в Access-Control-Allow-Origin | Можно использовать ‘*’, строгих требований нет |
Использование withCredentials критично при работе с авторизацией и сохранением состояния сессий на разных доменах. Без него запросы будут возвращать данные, но куки и токены не будут передаваться, что приведет к отказу в доступе к защищенным ресурсам.
Настройка заголовков CORS для работы с withCredentials

Для успешной передачи куки и авторизационных данных при кросс-доменных запросах необходимо правильно настроить заголовки CORS на сервере. Основные параметры:
Access-Control-Allow-Credentials – должен быть установлен в true. Это разрешает браузеру включать куки и другие учетные данные в запросы.
Access-Control-Allow-Origin – нельзя использовать ‘*’. Необходимо указывать конкретный домен, с которого приходят запросы, например: Access-Control-Allow-Origin: https://frontend.example.com.
Дополнительно рекомендуется:
- Установить заголовки Access-Control-Allow-Methods с перечнем разрешенных HTTP-методов: GET, POST, PUT, DELETE.
- Указать Access-Control-Allow-Headers, если запрос содержит нестандартные заголовки, например Authorization или Content-Type.
- Проверять предварительные OPTIONS-запросы, чтобы убедиться, что сервер корректно отвечает на preflight-запросы.
Без точной настройки CORS браузер заблокирует отправку куки с Axios, даже если withCredentials включен на клиенте. Совпадение доменов и включение Access-Control-Allow-Credentials являются обязательными условиями.
Обработка ошибок при запросах с withCredentials

Запросы с включенным withCredentials могут возвращать ошибки, связанные с CORS, куки и аутентификацией. Основные типы ошибок:
- Блокировка браузером CORS: возникает, если сервер не возвращает Access-Control-Allow-Credentials: true или Access-Control-Allow-Origin установлен как ‘*’.
- Отказ в авторизации: сервер возвращает статус 401 или 403, если переданные куки или токены недействительны.
- Сетевые ошибки: возникают при недоступности сервера или неправильной конфигурации HTTPS.
Рекомендации по обработке ошибок в Axios:
- Использовать блок try…catch для асинхронных запросов и проверять error.response.status для диагностики.
- Отлавливать ошибки CORS через error.request, чтобы отличать их от ошибок сервера.
- Для повторной авторизации использовать перехватчики Axios (interceptors) и обновление токенов перед повторным запросом.
- Логировать ошибки с указанием домена, метода и статуса, чтобы упрощать отладку кросс-доменных запросов.
Точное отслеживание типа ошибки и проверка настроек сервера позволяют корректно обрабатывать отказ в передаче куки и минимизировать сбои в работе с сессиями и авторизацией.
Примеры использования withCredentials в реальных проектах
В проектах с разделением фронтенда и бэкенда по разным доменам withCredentials используется для поддержания авторизации и работы с сессиями. Например, веб-приложения с React на одном домене и API на другом требуют передачи сессионных куки при каждом запросе.
Пример запроса для получения пользовательских данных с сохранением куки:
axios.get(‘https://api.example.com/user’, { withCredentials: true })
В проектах с микросервисами withCredentials обеспечивает корректную работу токенов авторизации при запросах к сервисам на разных поддоменах. Это позволяет фронтенду получать данные профиля, список заказов или уведомления без повторной авторизации.
Для REST и GraphQL API использование withCredentials позволяет управлять аутентификацией через HTTP-only куки, предотвращая XSS-уязвимости при хранении токенов на клиенте. В реальных проектах это сокращает необходимость дополнительной логики обновления токенов на фронтенде.
Также withCredentials применяется при интеграции с внешними сервисами, где сервер требует проверку сессии через куки, например, при работе с платежными системами или корпоративными порталами.
Вопрос-ответ:
Что делает параметр withCredentials в Axios?
Параметр withCredentials управляет отправкой куки и других учетных данных при кросс-доменных запросах. Если он включен, браузер добавляет к запросу все подходящие куки, включая HTTP-only и сессионные, а также заголовки авторизации. Без этого параметра кросс-доменные запросы не будут передавать куки, что может нарушить работу сессий и аутентификацию.
Когда следует включать withCredentials в запросах?
С включением withCredentials нужно обращаться, если фронтенд и бэкенд находятся на разных доменах и требуется сохранение сессии или передача токенов авторизации. Например, при работе с микросервисами или сторонними API, где сессия хранится в куки, параметр обеспечивает автоматическое добавление этих данных к запросу.
Какие ошибки могут возникнуть при использовании withCredentials?
Наиболее распространенные ошибки связаны с настройками CORS. Если сервер не возвращает Access-Control-Allow-Credentials: true или Access-Control-Allow-Origin указан как ‘*’, браузер заблокирует передачу куки. Также возможны ошибки 401 или 403 при недействительных токенах, и сетевые ошибки при недоступности сервера или неправильной конфигурации HTTPS.
Как настроить сервер для корректной работы с withCredentials?
Сервер должен возвращать заголовок Access-Control-Allow-Credentials: true и указывать конкретный домен в Access-Control-Allow-Origin. Для методов кроме GET нужно разрешить их через Access-Control-Allow-Methods, а если используются нестандартные заголовки — добавить их в Access-Control-Allow-Headers. Также важно правильно обрабатывать preflight-запросы OPTIONS.
Можно ли использовать withCredentials для всех запросов Axios глобально?
Да, можно создать экземпляр Axios с параметром withCredentials: true в конфигурации, чтобы все запросы автоматически включали куки и заголовки авторизации. Это удобно для приложений с постоянной аутентификацией через сессионные куки. При этом нужно убедиться, что сервер поддерживает соответствующие CORS-заголовки для всех запросов.
Для чего нужен withCredentials в Axios при работе с API на других доменах?
Параметр withCredentials позволяет браузеру отправлять куки и авторизационные данные вместе с запросами к сторонним доменам. Это важно, если сервер использует сессионные куки для идентификации пользователя. Без включенного withCredentials запросы кросс-домена не будут содержать куки, и сервер может возвращать ошибки авторизации.
Как проверить, что withCredentials работает корректно?
Для проверки можно открыть инструменты разработчика в браузере и убедиться, что в заголовках запроса отправляются нужные куки. Также важно, чтобы сервер возвращал Access-Control-Allow-Credentials: true и конкретный домен в Access-Control-Allow-Origin. Если куки не передаются, следует проверить настройки CORS и правильность домена.
