@LakeForest

Как обойти CORS в POST/DELETE запросах на Yii2?

Фронт на Vue.js. Пытаюсь отправить post или delete - ошибка CORS.
Отправляю GET - все нормально, что за магия????? Как мне POST отправить??
Access to XMLHttpRequest at 'http://192.168.99.101:8000/api/v1/items/7' from origin 'http://127.0.0.1:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.


Рекомендации, которые помогли GET запросам заработать:
public function beforeAction($action)
    {
        $this->enableCsrfValidation = false;
        return parent::beforeAction($action);
    }

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['corsFilter'] = [
            'class' => \yii\filters\Cors::class,
            'cors' => [
                // restrict access to
                'Origin' => ['*'],
                // Allow  methods
                'Access-Control-Request-Method' => ['POST', 'PUT', 'OPTIONS', 'GET', 'DELETE'],
                // Allow only headers 'X-Wsse'
                'Access-Control-Request-Headers' => ['*'],
                'Access-Control-Allow-Headers' => ['Content-Type'],
                // Allow credentials (cookies, authorization headers, etc.) to be exposed to the browser
//                'Access-Control-Allow-Credentials' => true,
                // Allow OPTIONS caching

                'Access-Control-Max-Age' => 3600,
                // Allow the X-Pagination-Current-Page header to be exposed to the browser.
                'Access-Control-Expose-Headers' => ['*']
            ],
        ];
        return $behaviors;
    }


РЕШЕНИЕ:
Спасибо всем и Rsa97 за наводки, далее этот пост помог решить проблему с CORS Preflight:
https://coderoad.ru/36274089/Yii2-CORS-с-Auth-не-р...
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
ЕМНИП, для всех запросов, кроме GET, браузер выполняет CORS Preflight. Перед основным запросом отправляется OPTIONS, в ответ на который браузер рассчитывает получить код 200 и установленные Access-Control-заголовки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@kostya_vtomske
https на оба домена. Крос доменные запросы, если мне память не изменяет на http не работает.
Ответ написан
@EvilDev
Проверь чтобы у тебя сервер принимал все типы запросов GET POST OPTIONS

/**
     * @inheritdoc
     */
    public function behaviors()
    {
        $behaviors = parent::behaviors();
        unset($behaviors['authenticator']);

        //  Добавляем первоначально CORS!
        $behaviors['corsFilter'] = [
            'class' => Cors::class,
        ];

        //  Теперь авторизацию.
        $behaviors['authenticator'] = [
            'class' => HttpBearerAuth::class,
            'except' => ['options'],
        ];

        return $behaviors;
    }
Ответ написан
vilinyh
@vilinyh
Браузер пишет, что не хватает заголовка Access-Control-Allow-Origin, добавьте его в конфиг к yii\filters\Cors. Или вынесите в настройки сервера.

И наследуйтесь от yii\rest\Controller, а не от yii\web\Controller - код подчистится от ненужных переопределений.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы