[[yii\filters\Cors|Cors]]
Совместное использование разными источниками CORS
- это механизм, который позволяет использовать различные ресурсы (шрифты, скрипты, и т.д.) с отличных от основного сайта доменов. В частности, AJAX вызовы JavaScript могут использовать механизм XMLHttpRequest. В противном случае, такие "междоменные" запросы были бы запрещены из-за политики безопасности same origin. CORS задаёт способ взаимодействия сервера и браузера, определяющий возможность делать междоменные запросы.
Фильтр [[yii\filters\Cors|Cors filter]] следует определять перед фильтрами Аутентификации / Авторизации, для того чтобы быть уверенными, что заголовки CORS будут всегда посланы.
use yii\filters\Cors;
use yii\helpers\ArrayHelper;
public function behaviors()
{
return ArrayHelper::merge([
[
'class' => Cors::className(),
],
], parent::behaviors());
}
Если вам необходимо добавить CORS-фильтрацию к [[yii\rest\ActiveController]] в вашем API, обратитесь к разделу Контроллеры.
Фильтрация Cors может быть настроена с помощью свойства [[yii\filters\Cors::$cors|$cors]].
cors['Origin']
: массив, используемый для определения источников. Может принимать значение['*']
(все) или['http://www.myserver.net', 'http://www.myotherserver.com']
. По умолчанию значение равно['*']
.cors['Access-Control-Request-Method']
: массив разрешенных типов запроса, таких как['GET', 'OPTIONS', 'HEAD']
. Значение по умолчанию['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']
.cors['Access-Control-Request-Headers']
: массив разрешенных заголовков. Может быть['*']
то есть все заголовки или один из указанных['X-Request-With']
. Значение по умолчанию['*']
.cors['Access-Control-Allow-Credentials']
: определяет, может ли текущий запрос быть сделан с использованием авторизации. Может принимать значенияtrue
,false
илиnull
(не установлено). Значение по умолчаниюnull
.cors['Access-Control-Max-Age']
: определяет срок жизни запроса, перед его началом. По умолчанию86400
.
Например, разрешим CORS для источника : http://www.myserver.net
с методами GET
, HEAD
и OPTIONS
:
use yii\filters\Cors;
use yii\helpers\ArrayHelper;
public function behaviors()
{
return ArrayHelper::merge([
[
'class' => Cors::className(),
'cors' => [
'Origin' => ['http://www.myserver.net'],
'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
],
],
], parent::behaviors());
}
Вы можете настроить заголовки CORS переопределения параметров по умолчанию для каждого из действий.
Например, добавление Access-Control-Allow-Credentials
для действия login
может быть сделано так :
use yii\filters\Cors;
use yii\helpers\ArrayHelper;
public function behaviors()
{
return ArrayHelper::merge([
[
'class' => Cors::className(),
'cors' => [
'Origin' => ['http://www.myserver.net'],
'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
],
'actions' => [
'login' => [
'Access-Control-Allow-Credentials' => true,
]
]
],
], parent::behaviors());
}