
Если вы разрабатываете приложение Node.js, которому необходимо взаимодействовать с другими серверами или API, вам может потребоваться включить совместное использование ресурсов между источниками (CORS), чтобы разрешить запросы из разных доменов.
CORS — это функция безопасности, которая запрещает веб-страницам или веб-приложениям отправлять запросы к домену, отличному от того, который обслуживал исходную веб-страницу. Без CORS вредоносные скрипты или приложения могут отправлять запросы к серверам или API, которые для них не предназначены.
В этой статье мы обсудим три метода включения CORS в ваш код Node.js, включая использование пакета cors, установку необходимых заголовков вручную и использование пакета http-proxy-middleware. Мы также предоставим примеры и рекомендации, которые помогут вам выбрать лучший метод для вашего конкретного случая использования.
1. Использование пакета CORS npm:
Установите пакет cors, выполнив в терминале следующую команду:
npm install cors
Требуйте пакет cors в коде Node.js:
const cors = require('cors');
Используйте промежуточное ПО cors в своем коде Node.js, прежде чем ваши маршруты будут определены:
app.use(cors());
Это позволит отправлять запросы из разных источников на ваш сервер Node.js. Вы также можете передать параметры промежуточному программному обеспечению cors для его дальнейшей настройки. Например, чтобы разрешить доступ к вашему серверу только определенным источникам, вы можете использовать следующий код:
const corsOptions = {
origin: 'http://example.com'
};
app.use(cors(corsOptions));
2. Включение необходимых заголовков в CORS:
Создайте функцию промежуточного программного обеспечения, которая устанавливает необходимые заголовки CORS:
function setCorsHeaders(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next();
}
Вышеупомянутая промежуточная функция устанавливает заголовок Access-Control-Allow-Origin для разрешения запросов из любого источника, заголовок Access-Control-Allow-Methods для разрешения указанных методов HTTP и заголовок Access-Control-Allow-Headers для разрешения указанных заголовков запроса.
Используйте промежуточное ПО setCorsHeaders в своем коде Node.js до определения ваших маршрутов:
app.use(setCorsHeaders);
Это установит необходимые заголовки CORS для всех входящих запросов.
Примечание. Важно понимать последствия предоставления всем источникам (*) доступа к вашему серверу. Из соображений безопасности рекомендуется ограничивать источники определенными доменами или IP-адресами.
3. С помощью пакета http-proxy-middleware:
Этот метод полезен, когда вы хотите проксировать запросы от вашего клиентского приложения на сервер Node.js, одновременно обрабатывая CORS.
Установите пакет http-proxy-middleware, выполнив в терминале следующую команду:
npm install http-proxy-middleware
Требуйте пакет http-proxy-middleware в коде Node.js:
const { createProxyMiddleware } = require('http-proxy-middleware');
Используйте функцию createProxyMiddleware для создания промежуточного программного обеспечения, которое передает запросы от вашего клиентского приложения на ваш сервер Node.js:
const apiProxy = createProxyMiddleware({
target: 'http://localhost:3000',
changeOrigin: true,
pathRewrite: {
'^/api': '/api/v1'
},
onProxyReq: function(proxyReq, req, res) {
proxyReq.setHeader('Authorization', `Bearer ${req.headers.authorization}`);
},
onProxyRes: function(proxyRes, req, res) {
proxyRes.headers['Access-Control-Allow-Origin'] = '*';
}
});
app.use('/api', apiProxy);
В приведенном выше примере функция createProxyMiddleware используется для создания промежуточного программного обеспечения, которое проксирует запросы от /api на стороне клиента к /api/v1 на сервере Node.js. Для параметра changeOrigin установлено значение true, чтобы перезаписать источник запроса в соответствии с целевым URL-адресом, а параметр pathRewrite используется для изменения пути запроса.
Функция onProxyReq используется для добавления заголовка Authorization к запросу прокси-сервера, а функция onProxyRes используется для установки заголовка Access-Control-Allow-Origin в ответе прокси-сервера, чтобы разрешить запросы из разных источников.
Этот метод может быть полезен, когда вы хотите проксировать запросы от клиентского приложения, которое размещено в домене, отличном от вашего сервера Node.js, а также обрабатывать CORS.