Налаштування CORS (Cross-Origin Resource Sharing) для API сайту

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування CORS (Cross-Origin Resource Sharing) для API сайту
Проста
~2-3 години
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування CORS (Cross-Origin Resource Sharing) для API сайту

CORS — механізм браузера, який дозволяє або забороняє веб-сторінці робити запити до іншого домену. Без правильної настройки фронтенд на app.example.ua не зможе звертатися до API на api.example.ua, навіть якщо обидва належать вам.

Принцип роботи

Для «простих» запитів (GET, POST з певними заголовками) браузер відправляє запит та перевіряє заголовки відповіді. Для «складних» (PUT, DELETE, кастомні заголовки) спочатку йде preflight-запит OPTIONS:

OPTIONS /api/users HTTP/1.1
Origin: https://app.example.ua
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: Authorization, Content-Type

Сервер має відповісти дозволом:

Access-Control-Allow-Origin: https://app.example.ua
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Authorization, Content-Type
Access-Control-Max-Age: 86400

Налаштування в Nginx

location /api/ {
    if ($request_method = 'OPTIONS') {
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
        add_header Access-Control-Allow-Headers "Authorization, Content-Type, X-Requested-With";
        add_header Access-Control-Max-Age 86400;
        return 204;
    }

    add_header Access-Control-Allow-Origin $http_origin always;
    add_header Access-Control-Allow-Credentials true always;
    proxy_pass http://backend;
}

Налаштування в Laravel

// config/cors.php
return [
    'paths' => ['api/*'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['https://app.example.ua', 'https://admin.example.ua'],
    'allowed_headers' => ['Authorization', 'Content-Type', 'X-Requested-With'],
    'exposed_headers' => ['X-Total-Count'],
    'max_age' => 86400,
    'supports_credentials' => true,
];

Пакет fruitcake/laravel-cors (вбудований у Laravel 7+) обробляє все автоматично через middleware.

Credentials та cookies

Якщо API використовує cookie-сесії або передає credentials:

  • Сервер має повернути Access-Control-Allow-Credentials: true
  • Access-Control-Allow-Origin не може бути * — тільки конкретний домен
  • Фронтенд має вказати credentials: 'include' у fetch або withCredentials: true в Axios

Типові помилки

  • Access-Control-Allow-Origin: * з credentials: true — браузер заблокує
  • Динамічна $http_origin без перевірки whitelist — будь-який сайт отримає доступ
  • Відсутність CORS-заголовків на помилкових відповідях (4xx/5xx) — фронтенд не побачить тіло помилки

Строк реалізації

Базова настройка CORS для типового проекту — 2–4 години.