- Что такое Webpack Dev Server Proxy и зачем нужны заголовки?
- Как настроить прокси с кастомными заголовками в Webpack
- Типичные сценарии использования заголовков
- Распространенные ошибки и их решение
- Динамические заголовки через onProxyReq
- FAQ: Ответы на ключевые вопросы
- Как передать куки через прокси?
- Почему заголовки Authorization не работают?
- Как отладить прокси-заголовки?
- Можно ли менять заголовки ответа сервера?
- Заключение
Что такое Webpack Dev Server Proxy и зачем нужны заголовки?
Webpack Dev Server (WDS) — инструмент для разработки, предоставляющий live reloading и горячую замену модулей. Прокси-функция WDS перенаправляет запросы с локального сервера на внешние API, решая проблемы CORS. Заголовки (headers) критически важны: они передают аутентификацию, cookies и метаданные, без которых бэкенд может отвергнуть запрос.
Как настроить прокси с кастомными заголовками в Webpack
Добавьте в webpack.config.js
секцию devServer.proxy
:
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'https://example.com',
changeOrigin: true,
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'X-Custom-Header': 'value'
}
}
}
}
};
- changeOrigin: Меняет заголовок
Host
на целевой домен (обязательно для избежания CORS). - headers: Объект с кастомными заголовками для всех проксируемых запросов.
Типичные сценарии использования заголовков
- Аутентификация: Передача
Authorization: Bearer ...
к защищенным API. - Куки и сессии: Включение
withCredentials: true
для кросс-доменных запросов. - Кастомные метаданные: Отправка
X-Request-Source: dev-server
для аналитики. - Обход CORS: Автоматическая установка
Origin
иReferer
черезchangeOrigin
.
Распространенные ошибки и их решение
- Заголовки не применяются: Убедитесь, что путь в
/api
совпадает с URL запроса. ИспользуйтеpathRewrite
для сложных маршрутов. - CORS-ошибки: Активируйте
changeOrigin: true
и проверьте настройки сервера (разрешите домен WDS). - Потеря кук: Добавьте
cookieDomainRewrite: 'localhost'
иonProxyRes: (proxyRes) => { proxyRes.headers['set-cookie'] = proxyRes.headers['set-cookie']?.map(c => c.replace(/Secure/gi, '')); }
для HTTPS. - Уязвимости безопасности: Никогда не хардкодьте секретные ключи в конфиг! Используйте
.env
-файлы.
Динамические заголовки через onProxyReq
Для генерации заголовков в рантайме используйте хуки:
proxy: {
'/api': {
target: 'https://example.com',
onProxyReq: (proxyReq, req) => {
proxyReq.setHeader('X-User-ID', req.user.id); // Пример из Express-сессии
}
}
}
FAQ: Ответы на ключевые вопросы
Как передать куки через прокси?
Добавьте в конфиг: cookieDomainRewrite: { 'example.com': 'localhost' }
и установите withCredentials: true
в клиентских запросах (например, в Axios).
Почему заголовки Authorization не работают?
1. Проверьте опечатки в ключе headers
.
2. Убедитесь, что changeOrigin: true
активен.
3. Если используете динамический токен, внедрите его через onProxyReq
.
Как отладить прокси-заголовки?
Включите логирование в WDS:
devServer: {
proxy: {
'/api': {
target: 'https://example.com',
logLevel: 'debug' // Выводит детали запросов в консоль
}
}
}
Можно ли менять заголовки ответа сервера?
Да, через хук onProxyRes
:
onProxyRes: (proxyRes) => {
proxyRes.headers['cache-control'] = 'no-store';
}
Заключение
Настройка proxy headers в Webpack Dev Server упрощает разработку, эмулируя продакшен-окружение. Помните: корректные заголовки решают 90% проблем с CORS и аутентификацией. Тестируйте конфигурацию через logLevel: 'debug'
и используйте хуки для сложных сценариев. Актуальные примеры ищите в официальной документации Webpack.