Обработка сообщения Laravel «Ответ на предполетный запрос не проходит проверку контроля доступа: нет ошибки Access-Control-Allow-Or»

При работе с Laravel и отправке запросов AJAX к другому домену вы можете столкнуться с сообщением об ошибке, например «Ответ на предполетный запрос не проходит проверку контроля доступа: Нет ‘Access-Control-Allow-Or». Эта ошибка связана с общим доступом к ресурсам между источниками (CORS) и возникает, когда сервер не включает необходимые заголовки, чтобы разрешить запрос из другого источника. В этой статье мы рассмотрим различные методы обработки этой ошибки и включения успешных запросов AJAX между источниками в Laravel.

Метод 1: промежуточное программное обеспечение CORS
Один из наиболее распространенных методов обработки ошибок, связанных с CORS, в Laravel — использование промежуточного программного обеспечения. Laravel предоставляет встроенное промежуточное ПО под названием Cors, которое можно использовать для добавления необходимых заголовков к ответам сервера. Чтобы включить его, выполните следующие действия:

Шаг 1. Установите пакет barryvdh/laravel-cors:

composer require barryvdh/laravel-cors

Шаг 2. Зарегистрируйте промежуточное программное обеспечение Corsв файле app/Http/Kernel.php:

protected $middleware = [
    // Other middleware...
    \Barryvdh\Cors\HandleCors::class,
];

Шаг 3. Настройте параметры CORS в файле config/cors.php:

return [
    'paths' => ['api/*'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_headers' => ['*'],
];

Метод 2: пользовательское промежуточное программное обеспечение
Если вам нужен больший контроль над настройками CORS, вы можете создать собственное промежуточное программное обеспечение. Вот пример:

Шаг 1. Создайте промежуточное программное обеспечение с помощью команды Artisan:

php artisan make:middleware CorsMiddleware

Шаг 2. Откройте вновь созданный CorsMiddlewareи добавьте следующий код:

public function handle($request, Closure $next)
{
    $response = $next($request);

    $response->header('Access-Control-Allow-Origin', '*');
    $response->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    $response->header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    return $response;
}

Шаг 3. Зарегистрируйте промежуточное ПО в файле app/Http/Kernel.php:

protected $middleware = [
    // Other middleware...
    \App\Http\Middleware\CorsMiddleware::class,
];

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

Шаг 1. Создайте новое промежуточное ПО с помощью команды Artisan:

php artisan make:middleware CorsRouteMiddleware

Шаг 2. Откройте CorsRouteMiddlewareи добавьте следующий код:

public function handle($request, Closure $next)
{
    $response = $next($request);
    $response->header('Access-Control-Allow-Origin', '*');
    $response->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    $response->header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    return $response;
}

Шаг 3. Зарегистрируйте промежуточное программное обеспечение в файле app/Http/Kernel.phpв массиве $routeMiddleware:

protected $routeMiddleware = [
    // Other middleware...
    'cors' => \App\Http\Middleware\CorsRouteMiddleware::class,
];

Шаг 4. Примените промежуточное программное обеспечение к определенным маршрутам:

Route::group(['middleware' => 'cors'], function () {
    // Routes that require CORS headers
});

Реализуя один из упомянутых выше методов, вы можете успешно обработать ошибку «Ответ на предполетный запрос не проходит проверку контроля доступа: нет ошибки Access-Control-Allow-Or» в Laravel. Независимо от того, решите ли вы использовать встроенное промежуточное программное обеспечение Cors, создать собственное промежуточное программное обеспечение или применить промежуточное программное обеспечение маршрута, вы сможете включить запросы AJAX между источниками и обеспечить удобство работы для ваших пользователей.

Не забудьте выбрать метод, который лучше всего соответствует требованиям вашего приложения и соображениям безопасности. Приятного кодирования!