CORS

CORS (Cross-Origin Resource Sharing) - перехресний обмін ресурсами. Механізм, який за допомогою HTTP-заголовків дає браузеру дозвіл завантажувати ресурси з певного джерела на запит web-додатка, отриманого з відмінного джерела.

Задля безпеки всі браузери припиняють усі перехресні HTTP-запити які виробляються клієнтським JavaScript. Це - правило одного джерела. Отже додаток створений на одному домені не зможе виконувати запити до HTTP-ресурсів іншого домену.

Тобто на сервері, на якому реалізовано API треба прописати правильні CORS-заголовки для передачі даних між web-браузерами та web-серверами.

Для Node.js це можна реалізувати за допомогою пакету cors.

Установка

terminal
npm install cors

Приклад використання (підключення):

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors());

app.get('/', (req, res, next) => {
  res.json({ message: 'CORS is activated' });
});

app.listen(3000, function () {
  console.log('CORS-enabled web server listening on port 3000');
});

У функцію проміжного ПЗ cors, можна передати аргумент - конфігураційний об'єкт з такими властивостями:

  • origin - Налаштовує заголовок CORS Access-Control-Allow-Origin. Найчастіше це рядок "*" який дозволяє запит від будь-якого домену. Можна вказувати конкретне значення ("http://example.com"), а також використовувати регулярні вирази, або масив рядків або регулярних виразів, якщо доступ до API можливий з різних доменів

  • methods - Налаштовує заголовок CORS Access-Control-Allow-Methods. Тут вказують, або рядок з HTTP методами - наприклад, "GET, PUT, POST", або масив ['GET', 'PUT', 'POST'], яким дозволені міждоменні запити.

  • allowedHeaders - Налаштовує заголовок CORS Access-Control-Allow-Headers. Тут вказують рядок з роздільниками-комами, наприклад, "Content-Type, Authorization" або масив ['Content-Type', 'Authorization']. Тобто це - які заголовки дозволені при запиті.

  • exposedHeaders - Налаштовує заголовок CORS Access-Control-Expose-Headers. Керує заголовками користувача.

  • credentials - Налаштовує заголовок CORS Access-Control-Allow-Credentials. Встановити true для передачі заголовка, інакше він не вказується.

  • maxAge - Налаштовує заголовок CORS Access-Control-Max-Age. Встановити ціле число для передачі заголовка, інакше він опускається.

  • preflightContinue: Надіслати відповідь попередньої перевірки CORS наступному обробнику.

  • optionsSuccessStatus - Код стану для використання при успішних OPTIONS запитах, бо деякі застарілі браузери (IE11, SmartTV) не працюють зі статусом 204.

Конфігурація за замовчуванням:

{
  origin: '*',
  methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
  preflightContinue: false,
  optionsSuccessStatus: 204
}

Покликання:

CORS на NPM

Last updated