CORS (Cross-Origin Resource Sharing) - перехресний обмін ресурсами. Механізм, який за допомогою HTTP-заголовків дає браузеру дозвіл завантажувати ресурси з певного джерела на запит web-додатка, отриманого з відмінного джерела.
Задля безпеки всі браузери припиняють усі перехресні HTTP-запити які виробляються клієнтським JavaScript. Це - правило одного джерела. Отже додаток створений на одному домені не зможе виконувати запити до HTTP-ресурсів іншого домену.
Тобто на сервері, на якому реалізовано API треба прописати правильні CORS-заголовки для передачі даних між web-браузерами та web-серверами.
Для Node.js це можна реалізувати за допомогою пакету cors.
Установка
terminal
npm install cors
Приклад використання (підключення):
constexpress=require('express');constcors=require('cors');constapp=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.