Laravel10+Inertia+Vue3跨域问题:未发送Access-Control-Allow-Origin头
Laravel 10跨域资源请求(Access-Control-Allow-Origin缺失)解决方法
1. 全局启用CORS中间件
检查app/Http/Kernel.php,将HandleCors中间件添加到全局$middleware数组(而非仅api中间件组),确保所有请求(包括静态资源请求)都经过CORS处理:
protected $middleware = [ // ...其他已存在的中间件 \App\Http\Middleware\HandleCors::class, ];
2. 完善CORS配置文件
打开config/cors.php,确保配置覆盖所有必要场景:
return [ 'paths' => ['*'], // 允许所有路径,或明确指定'/resources/js/*' 'allowed_methods' => ['*'], 'allowed_origins' => ['*'], // 或指定具体域名'sub-b.domain' 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => [], 'max_age' => 3600, 'supports_credentials' => false, ];
3. 服务器层面补充CORS规则(避免Laravel中间件未触发)
如果静态资源由Web服务器直接返回(未经过Laravel路由),需要在服务器配置中添加CORS头:
- Nginx:在站点配置中添加
location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods *; add_header Access-Control-Allow-Headers *; if ($request_method = OPTIONS) { return 204; } }
- Apache:在项目根目录的
.htaccess中添加
Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "*" Header set Access-Control-Allow-Headers "*"
4. 清除缓存并重启服务
执行Laravel缓存清理命令,确保配置生效:
php artisan config:clear php artisan cache:clear
同时重启Web服务器(Nginx/Apache)及PHP-FPM(若使用)。
5. 规范静态资源访问路径
Laravel中resources目录下的文件通常需要编译后放到public目录,建议访问编译后的资源(如https://sub-a.domain/js/app.js),而非直接请求resources目录下的源文件,这样更符合框架规范,也能确保请求经过Laravel的中间件处理。
内容的提问来源于stack exchange,提问作者Clems
相关产品推荐
相关产品推荐

