Что такое CORS и как он работает?
CORS (Cross-Origin Resource Sharing) — это механизм безопасности, который позволяет ограничить доступ к ресурсам, загружаемым с одного источника с веб-приложения, находящегося на другом источнике. Этот механизм помогает предотвратить атаки, такие как крест-оригинальные запросы (Cross-Site Request Forgery, CSRF).
Как работает CORS?
Когда веб-браузер делает запрос к ресурсу, расположенному на другом домене (например, ваш сайт example.com
пытается
получить данные с api.example.org
), браузер отправляет специальный HTTP-заголовок Origin
, который указывает
источник, из которого был сделан запрос.
Если сервер, к которому обращается ваш сайт, одобряет запрос с вашего источника, он отправляет заголовок
Access-Control-Allow-Origin
, содержащий либо конкретный разрешённый источник, либо *
(все источники).
Вот как выглядит обмен заголовками:
GET /data HTTP/1.1
Host: api.example.org
Origin: https://example.com
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://example.com
Content-Type: application/json
{ "message": "Hello, CORS!" }
Настройка CORS на сервере
В зависимости от вашего серверного окружения, настройки CORS могут быть выполнены по-разному. Рассмотрим пример настройки CORS на сервере, написанном на Node.js с использованием Express:
const express = require('express');
const cors = require('cors');
const app = express();
// Настройка CORS
const corsOptions = {
origin: 'https://example.com', // Разрешённый источник
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
credentials: true,
};
app.use(cors(corsOptions));
app.get('/data', (req, res) => {
res.json({message: 'Hello, CORS!'});
});
app.listen(3000, () => {
console.log('Сервер запущен на http://localhost:3000');
});
Важные аспекты CORS
PUT
, DELETE
, запросов с заголовками, отличными от
обычных) браузер сначала отправляет "preflight" запрос методом OPTIONS, чтобы проверить, разрешён ли данный тип
запроса.Заключение
CORS — это важный механизм безопасности для веб-разработки. Понимание его работы поможет вам безопасно использовать API и взаимодействовать с ресурсами с других доменов. Конфигурируя CORS на вашем сервере, вы создаёте гибкое и безопасное взаимодействие между вашем клиентском приложением и сторонними API.