在前後端分離的專案中,前端請求後端介面時可能會遇到跨域的問題。其中,一個典型的場景是:前端專案運行在 http://localhost:8080,而後端專案運行在 http://localhost:8000,這時候就需要設定跨域。
在 Laravel 中,要設定跨域可以採用以下兩種方法。
先建立一個中介軟體CorsMiddleware:
php artisan make:middleware CorsMiddleware
在CorsMiddleware 中處理跨域:
<?php namespace App\Http\Middleware; use Closure; class CorsMiddleware { public function handle($request, Closure $next) { $origin = $request->header('Origin') ?: '*'; header('Access-Control-Allow-Origin: ' . $origin); header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS'); return $next($request); } }
該中間件會在Http/Kernel.php 中的$middleware 陣列中註冊:
protected $middleware = [ // ... \App\Http\Middleware\CorsMiddleware::class, ];
這時候Laravel 會在回應頭中加入Access-Control-Allow-Origin 等跨網域相關的資訊。
其實,Laravel 社群已經有許多開源擴充包可以用來處理跨域問題。例如,laravel-cors,它提供了一些設定項來設定跨域請求。
首先,安裝擴充功能:
composer require barryvdh/laravel-cors
接著,在config/app.php 中的providers 陣列中註冊服務提供者:
'providers' => [ // ... Barryvdh\Cors\ServiceProvider::class, ],
最後,發布設定檔:
php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"
這時候,可以在config/cors.php 中設定跨網域請求:
return [ /* |-------------------------------------------------------------------------- | Laravel CORS Options |-------------------------------------------------------------------------- | | The allowed_methods and allowed_headers options are case-insensitive. | */ 'allowed_origins' => ['*'], 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'allowed_methods' => ['*'], 'exposed_headers' => [], 'max_age' => 0, 'supports_credentials' => false, ];
依照需求進行對應的設定即可。
以上就是在 Laravel 中設定跨域的兩種方法,選擇一種適合自己的方法。
以上是laravel怎麼設定跨域(兩種方法)的詳細內容。更多資訊請關注PHP中文網其他相關文章!