Как запретить выполнение OPTIONST request?

Всё что касается построения API
Ответить
tonx92
Сообщения: 12
Зарегистрирован: 2015.09.03, 21:40

Как запретить выполнение OPTIONST request?

Сообщение tonx92 »

Столкнулся с такой проблемой, при отправке с клиента ajax сначала отправляет Preflight OPTIONS запрос, по идее он не должен выполняться на сервере, а должен приходить ответ с разрешенными заголовками, но yii не только отдает ответ с CORS но и выполняет action. Как запретить yii выполнять OPTIONS запросы?
chsergey
Сообщения: 3
Зарегистрирован: 2016.05.20, 15:22

Re: Как запретить выполнение OPTIONST request?

Сообщение chsergey »

скорее всего без 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 )
vsivsi
Сообщения: 2
Зарегистрирован: 2013.10.09, 21:44

Re: Как запретить выполнение OPTIONST request?

Сообщение vsivsi »

Тоже столкнулся с этой проблемой.
В действии контроллера добавил код:

Код: Выделить всё

public function actionCreate()
    {
        if (Yii::$app->request->isOptions)
            return true;
           
           ...
    }
            
Костыль, конечно.. но ничего лучше я не придумал. Иначе, вылезали Exceptions, поскольку POST-данные не передаются при запросе OPTIONS и метод не может нормально отработать.
Похоже, это баг.. ну, или я чего-то не понимаю..
Ответить