Поиск по сайту
Ctrl + K
Вопросы по Веб-разработке

Что такое 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

  • Preflight-запросы: Для некоторых типов запросов (например, PUT, DELETE, запросов с заголовками, отличными от обычных) браузер сначала отправляет "preflight" запрос методом OPTIONS, чтобы проверить, разрешён ли данный тип запроса.
  • Проблемы безопасности: Лучше использовать строгое управление CORS и явно указывать допустимые источники, чтобы избежать потенциальных уязвимостей в безопасности.
  • Проверка CORS в браузере: Если вы видите ошибки CORS в консоли браузера, это может означать, что сервер не включает нужный заголовок, или заголовки указаны неверно.
  • Заключение

    CORS — это важный механизм безопасности для веб-разработки. Понимание его работы поможет вам безопасно использовать API и взаимодействовать с ресурсами с других доменов. Конфигурируя CORS на вашем сервере, вы создаёте гибкое и безопасное взаимодействие между вашем клиентском приложением и сторонними API.