前言
跨來源資源共享(Cross-Origin Resource Sharing, CORS)是一種使用額外 HTTP 標頭使得目前瀏覽網站的使用者代理取得存取其他來源(或網域)伺服器特定資源權限的機制。Laravel 在不使用 laravel-cors 套件的情況下,可以自行新增中介層處理跨域資源共享。
做法
新增 SetCorsHeaders 中介層。
1 | php artisan make:middleware SetCorsHeaders |
修改 app/Http/Middleware 資料夾的 SetCorsHeaders.php 檔。
1 | namespace App\Http\Middleware; |
一般來說,可以直接在 app/Http 資料夾的 Kernel.php 檔的 api 路由群組註冊 SetCorsHeaders 中介層。
1 | protected $middlewareGroups = [ |
但由於一些前端的 HTTP 請求套件,如 Axios,會在 DELETE 和 PATCH 等非簡單請求方法預先發出 OPTIONS 請求,此 OPTIONS 請求並不會進入 api 路由的生命週期,導致出現禁止訪問的錯誤訊息。因此需要將 SetCorsHeaders 中介層直接註冊在全域的 HTTP 中介層群組中。
1 | protected $middleware = [ |