Cross-Origin Resource Sharing (CORS) – это механизм, который позволяет веб-приложениям запрашивать ресурсы с другого домена. В контексте REST API на Yii2, настройка CORS позволяет разрешить или ограничить доступ к API ресурсам из других доменов.
Чтобы настроить CORS в REST API на Yii2, следуйте следующим шагам:
Шаг 1: Установка библиотеки обработки CORS
Сначала установите библиотеку yiisoft/yii2-cors
, выполнив команду Composer:
composer require --prefer-dist yiisoft/yii2-cors
После установки обновите ваш файл composer.json
, чтобы добавить "yiisoft/yii2-cors": "^2.0"
в секцию "require".
Шаг 2: Настройка компонента CORS
Создайте новый файл конфигурации config/cors.php
и добавьте в него следующий код:
<?php return [ 'corsFilter' => [ 'class' => yiifiltersCors::class, 'cors' => [ 'Origin' => ['*'], 'Access-Control-Allow-Credentials' => true, 'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], 'Access-Control-Allow-Headers' => ['*'], 'Access-Control-Max-Age' => 86400, ], ], ];
Этот файл конфигурации настраивает компонент Cors
, который обрабатывает CORS-запросы и добавляет соответствующие заголовки в ответы сервера.
Шаг 3: Настройка приложения
Откройте файл config/main.php
и добавьте следующий код в секцию components
:
'components' => [ // ... 'response' => [ 'class' => yiiwebResponse::class, 'format' => yiiwebResponse::FORMAT_JSON, 'charset' => 'UTF-8', 'on beforeSend' => static function (yiibaseEvent $event) { /** @var yiiwebResponse $response */ $response = $event->sender; $response->headers->add('Access-Control-Allow-Origin', '*'); $response->headers->add('Access-Control-Allow-Credentials', true); $response->headers->add('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS'); $response->headers->add('Access-Control-Allow-Headers', '*'); $response->headers->add('Access-Control-Max-Age', 86400); }, ], 'request' => [ // ... 'parsers' => [ // ... 'application/json' => yiiwebJsonParser::class, ], ], 'urlManager' => [ // ... 'rules' => [ // ... ['class' => yiirestUrlRule::class, 'controller' => 'your-controller'], ], ], // ... 'as cors' => configcorsCors::class, ],
В этом коде настраивается поведение компонента response
, чтобы добавить соответствующие заголовки Access-Control-Allow-* в ответы сервера.
'parsers' => ['application/json' => yiiwebJsonParser::class]
настраивает компонент request
для автоматического разбора данных запросов с типом application/json
в массивы или объекты PHP.
'rules' => ['class' => yiirestUrlRule::class, 'controller' => 'your-controller']
настраивает компонент urlManager
для создания путей к вашему контроллеру.
'as cors' => configcorsCors::class
добавляет фильтр Cors
к вашему приложению в качестве глобального фильтра.
Шаг 4: Применение настроек CORS к вашим контроллерам
Для того, чтобы применить CORS-настройки к вашим контроллерам, добавьте следующий код в каждый контроллер, где требуется CORS:
use yiifiltersCors; class YourController extends yiirestActiveController { public function behaviors() { $behaviors = parent::behaviors(); $behaviors['corsFilter'] = [ 'class' => Cors::class, ]; return $behaviors; } }
Убедитесь, что вы заменили YourController
на имя вашего контроллера.
Шаг 5: Проверка работоспособности
Теперь ваши настройки CORS должны быть применены к вашему REST API на Yii2. Вы можете проверить работу, отправив запросы с другого домена и проверив заголовки ответа, которые должны содержать Access-Control-Allow-* заголовки, устанавливаемые компонентом response
в main.php
.
Более подробную информацию и другие возможности настройки CORS в Yii2 можно найти в официальной документации Yii2 (https://www.yiiframework.com/doc/guide/2.0/en/runtime-routing#cors-setup).