Как устранить CORS Policy error при загрузке скрипта jQuery в Yii 2?

Для начала, давайте определимся с тем, что такое "CORS Policy error". Политика same-origin (CORS) - это механизм, предоставляемый браузером, который определяет, разрешено ли веб-странице загружать ресурсы с другого источника. Если страница пытается загрузить ресурс (такой как скрипт) с другого домена, и если эта загрузка запрещена политикой same-origin, то возникает ошибка CORS.

Теперь давайте перейдем к проблеме в контексте Yii 2. Если у вас возникает ошибка CORS при загрузке скрипта jQuery в Yii 2, это может быть вызвано настройками ваших веб-серверов или настройками Yii.

Yii 2 предоставляет возможность настройки CORS с помощью фильтра CORS, который может быть применен к контроллеру или действию. Для использования фильтра CORS, вам необходимо сначала установить его с помощью Composer, выполнив следующую команду:

composer require yii2mod/yii2-cors "*"

После установки фильтра CORS, вам необходимо настроить его в вашем приложении Yii 2. Для этого вам нужно добавить следующий код в ваш файл конфигурации приложения (config/web.php):

return [
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            'enableCookieValidation' => false,
            'enableCsrfValidation' => false,
            'parsers' => [
                'application/json' => 'yiiwebJsonParser',
            ],
        ],
        // ...
        'response' => [
            'corsFilter' => [
                'class' => yii2modcorsCors::class,
                'cors' => [
                    // список доменов, с которых разрешается загрузка скриптов
                    'Origin' => ['http://your-domain.com', 'https://your-domain.com'],
                    // разрешает загрузку куки с другого домена
                    'Access-Control-Allow-Credentials' => true,
                    // разрешает загрузку определенных заголовков
                    'Access-Control-Allow-Headers' => ['X-Requested-With']
                ],
            ],
        ],
        // ...
    ],
    // ...
];

В приведенном выше коде мы настроили CORS для разрешения загрузки скриптов с доменов http://your-domain.com и https://your-domain.com. Если вам нужно разрешить загрузку с других доменов, просто добавьте их в список.

Теперь, когда вы настроили фильтр CORS, тестирование может потребовать времени и может потребоваться некоторая отладка. Возможно, вам придется изменить настройки сервера, чтобы разрешить CORS. Это может включать проверку настроек веб-сервера, таких как Apache или Nginx, и настроек CORS в браузере.

Если вы используете Apache, вам может потребоваться добавить заголовки CORS в файл .htaccess. Добавьте следующие строки в файл .htaccess вашего проекта:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

Если вы используете Nginx, вам может потребоваться изменить файл настройки вашего сервера. Добавьте следующие строки в ваш файл конфигурации Nginx:

location / {
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' '0';
        return 204;
    }
    if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';
    }
    if ($request_method = 'GET') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';
    }
}

В приведенном выше коде мы добавили заголовки CORS для разрешения загрузки с любого домена с помощью символа *. Если вам нужно разрешить загрузку только с определенных доменов, измените значение * на список доменов.

Это один из самых распространенных способов устранения ошибки CORS при загрузке скрипта jQuery в Yii 2. Однако, в зависимости от вашей конкретной ситуации, могут потребоваться дополнительные настройки или другие способы решения проблемы.