在 Laravel 中,跨域資源共享(CORS)可以通過多種方式配置。以下是一些常見的方法:
創建一個新的中間件: 你可以使用 Artisan 命令行工具來創建一個新的中間件。
php artisan make:middleware CorsMiddleware
編輯中間件文件:
打開新創建的中間件文件,通常位于 app/Http/Middleware/CorsMiddleware.php
,并添加以下代碼:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CorsMiddleware
{
public function handle(Request $request, Closure $next)
{
$response = $next($request);
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
$response->headers->set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization');
return $response;
}
}
注冊中間件:
打開 app/Http/Kernel.php
文件,將新創建的中間件添加到 $middleware
數組中,或者將其添加到特定的路由組中。
protected $middleware = [
// 其他中間件
\App\Http\Middleware\CorsMiddleware::class,
];
或者,如果你只想在特定的路由組中使用:
protected $middlewareGroups = [
'web' => [
// 其他中間件
\App\Http\Middleware\CorsMiddleware::class,
],
];
你可以使用第三方包來簡化 CORS 配置,例如 fruitcake/laravel-cors
。
安裝包:
使用 Composer 安裝 fruitcake/laravel-cors
包。
composer require fruitcake/laravel-cors
配置包:
打開 config/cors.php
文件,你可以在這里配置 CORS 的各種選項。
return [
'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];
注冊服務提供者:
打開 config/app.php
文件,將 Fruitcake\Cors\HandleCors
服務提供者添加到 providers
數組中。
'providers' => [
// 其他服務提供者
Fruitcake\Cors\HandleCors::class,
],
發布配置文件(可選): 如果你想自定義 CORS 配置文件的位置或名稱,可以使用以下命令發布配置文件:
php artisan vendor:publish --provider="Fruitcake\Cors\HandleCors"
如果你使用的是 Nginx 或 Apache 作為 Web 服務器,你也可以在服務器配置中設置 CORS 頭。
在 Nginx 配置文件中添加以下內容:
server {
listen 80;
server_name yourdomain.com;
location / {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type, Accept, Origin, Authorization' always;
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, Accept, Origin, Authorization';
add_header 'Content-Length' 0;
add_header 'Content-Type' 'text/plain charset=UTF-8';
return 204;
}
# 其他配置
}
}
在 Apache 配置文件中添加以下內容:
<VirtualHost *:80>
ServerName yourdomain.com
<Directory /path/to/your/laravel/project>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Accept, Origin, Authorization"
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=204,L]
</IfModule>
# 其他配置
</Directory>
</VirtualHost>
通過以上方法,你可以在 Laravel 應用中配置跨域資源共享(CORS)。選擇適合你項目需求的方法進行配置即可。