При работе с 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 между источниками и обеспечить удобство работы для ваших пользователей.
Не забудьте выбрать метод, который лучше всего соответствует требованиям вашего приложения и соображениям безопасности. Приятного кодирования!