CORS — это механизм безопасности браузеров, который контролирует доступ к ресурсам вне текущего домена. React-приложение (клиентская сторона) часто сталкивается с CORS при запросах к API на другом домене.
Лучшее решение — настроить CORS на сервере (бэкенде), добавив соответствующие заголовки:
// Пример для Node.js (Express)
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', 'http://localhost:3000'); // или '*' для всех доменов
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next();
});
В Create React App можно настроить прокси в package.json
:
{
"proxy": "http://localhost:5000"
}
Или создать файл setupProxy.js
(для более сложных сценариев):
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/api',
createProxyMiddleware({
target: 'http://localhost:5000',
changeOrigin: true,
})
);
};
Временное решение для разработки — расширения вроде "CORS Unblock", но это небезопасно для production.
Можно создать промежуточный сервер, который будет делать запросы к API:
// Пример простого прокси-сервера
app.get('/api/data', async (req, res) => {
const response = await fetch('https://external-api.com/data');
const data = await response.json();
res.json(data);
});
Для production нужно:
fetch(url, {
credentials: 'include'
});
res.header('Access-Control-Allow-Credentials', 'true');
оптимальный подход — правильная настройка сервера. Для разработки можно использовать прокси Create React App, но production-решение требует корректных CORS-заголовков на сервере.