← Назад к вопросам
Какие настройки нужно указать для получения разрешения на конкретные домены в CORS?
2.0 Middle🔥 191 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
CORS Headers для конкретных доменов
Для получения разрешения на обращение к конкретным доменам, на сервере нужно установить CORS-заголовки. Основной заголовок - Access-Control-Allow-Origin.
Основные CORS заголовки
// Пример настройки на бэкенде (Express.js)
const express = require('express');
const app = express();
// 1. Разрешить один конкретный домен
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', 'https://example.com');
res.header('Access-Control-Allow-Credentials', 'true');
next();
});
// 2. Разрешить несколько доменов
const allowedOrigins = [
'https://example.com',
'https://app.example.com',
'http://localhost:3000'
];
app.use((req, res, next) => {
const origin = req.get('origin');
if (allowedOrigins.includes(origin)) {
res.header('Access-Control-Allow-Origin', origin);
}
next();
});
Полный набор CORS заголовков
// Необходимые заголовки для работы с фронтенда
const corsHeaders = {
'Access-Control-Allow-Origin': 'https://example.com', // какие домены разрешены
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', // какие методы
'Access-Control-Allow-Headers': 'Content-Type, Authorization', // какие заголовки
'Access-Control-Allow-Credentials': 'true', // разрешить отправку cookies
'Access-Control-Max-Age': '3600' // кешировать preflight на 1 час
};
// Пример обработки OPTIONS запроса (preflight)
app.options('/api/*', (req, res) => {
res.header('Access-Control-Allow-Origin', 'https://example.com');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.header('Access-Control-Allow-Credentials', 'true');
res.sendStatus(200);
});
Использование middleware (Express)
const cors = require('cors');
// Простой способ - разрешить все домены
app.use(cors());
// Более безопасный способ - конкретные домены
const corsOptions = {
origin: function (origin, callback) {
const allowedOrigins = [
'https://example.com',
'https://app.example.com'
];
if (!origin || allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(new Error('Not allowed by CORS'));
}
},
credentials: true, // разрешить отправку credentials
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
allowedHeaders: 'Content-Type,Authorization'
};
app.use(cors(corsOptions));
На фронтенде (JavaScript)
// При отправке запроса нужно указать credentials
const response = await fetch('https://api.example.com/data', {
method: 'GET',
credentials: 'include', // отправлять cookies
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
});
// Или в axios
const instance = axios.create({
baseURL: 'https://api.example.com',
withCredentials: true // отправлять cookies
});
instance.get('/data');
Важные моменты
Wildcard ограничение
- Если использовать
Access-Control-Allow-Origin: *, тоwithCredentials: trueне будет работать - Нужно явно указывать домен
Preflight запрос
- Для сложных запросов (POST, PUT, DELETE) браузер автоматически отправляет OPTIONS запрос
- Сервер должен ответить нужными заголовками
Безопасность
// Правильно - проверять origin
const origin = req.get('origin');
if (whitelist.includes(origin)) {
res.header('Access-Control-Allow-Origin', origin);
}
// Неправильно - разрешить все
res.header('Access-Control-Allow-Origin', '*');