Как запретить выполнение OPTIONST request?
Как запретить выполнение OPTIONST request?
Столкнулся с такой проблемой, при отправке с клиента ajax сначала отправляет Preflight OPTIONS запрос, по идее он не должен выполняться на сервере, а должен приходить ответ с разрешенными заголовками, но yii не только отдает ответ с CORS но и выполняет action. Как запретить yii выполнять OPTIONS запросы?
Re: Как запретить выполнение OPTIONST request?
скорее всего без preflight OPTIONS у вас не будет работать js-клиент, т.к. это обязательное условие у браузеров (как раз из-за CORS)
запретить OPTIONS можно через настройки роутинга
[
'class' => 'yii\rest\UrlRule',
'controller' => ['v1/employee'],
'except' => ['options'],
],
но в этом случае на запрос OPTIONS будет ответ 404
то же самое будет если не указать action Options в контроллере
public function actions() {
$actions = parent::actions();
unset($actions['options']);
return $actions;
}
какой код вы хотите на OPTIONS?)
можно создать свой OptionsAction и там выбрасывать BadRequestHttpException или ForbiddenHttpException )
запретить OPTIONS можно через настройки роутинга
[
'class' => 'yii\rest\UrlRule',
'controller' => ['v1/employee'],
'except' => ['options'],
],
но в этом случае на запрос OPTIONS будет ответ 404
то же самое будет если не указать action Options в контроллере
public function actions() {
$actions = parent::actions();
unset($actions['options']);
return $actions;
}
какой код вы хотите на OPTIONS?)
можно создать свой OptionsAction и там выбрасывать BadRequestHttpException или ForbiddenHttpException )
Re: Как запретить выполнение OPTIONST request?
Тоже столкнулся с этой проблемой.
В действии контроллера добавил код:
Костыль, конечно.. но ничего лучше я не придумал. Иначе, вылезали Exceptions, поскольку POST-данные не передаются при запросе OPTIONS и метод не может нормально отработать.
Похоже, это баг.. ну, или я чего-то не понимаю..
В действии контроллера добавил код:
Код: Выделить всё
public function actionCreate()
{
if (Yii::$app->request->isOptions)
return true;
...
}
Похоже, это баг.. ну, или я чего-то не понимаю..