Ubuntu环境Laravel-Nova调用API报Access-Control-Allow-Origin缺失如何解决
Laravel Nova前端请求接口CORS报错解决方案
首先明确两个错误操作
- 前端请求头加
Access-Control-Allow-Origin完全无效:这个头是服务端响应时返回的响应头,前端主动加反而会触发预检请求规则,导致报错加剧,请立刻删除你添加的那行axios配置代码。 - Apache配置不生效大概率是没有匹配到接口路由,或者没有开启必要的Apache模块,优先级低于Laravel本身的CORS中间件配置。
分步修复方案
步骤1:删除错误配置
删掉你代码中添加的axios.defaults.headers.common['Access-Control-Allow-Origin'] = '*';这一行。
步骤2:配置Laravel自带CORS中间件
Laravel 7及以上版本默认集成了CORS中间件,直接修改config/cors.php配置即可:
return [ // 把你需要放行的接口路由加到paths数组,比如你的private-api前缀是/api/,或者Nova自定义路由 'paths' => ['api/*', 'nova-api/*', 'my-private-api'], // 测试阶段可以先设为*,生产环境替换成你Nova后台实际访问域名 'allowed_origins' => ['*'], 'allowed_methods' => ['*'], 'allowed_headers' => ['*'], 'exposed_headers' => [], 'max_age' => 0, // 如果你没有用Cookie认证就保持false 'supports_credentials' => false, ];
配置完成后执行php artisan config:clear清除配置缓存生效。
步骤3:检查路由中间件
确认你定义my-private-api接口的路由文件中,对应路由已经挂载了cors中间件:
Route::post('my-private-api', [YourController::class, 'yourMethod'])->middleware('cors');
步骤4:修复Apache配置(如果上述操作仍无效)
- 首先开启Apache的headers模块:
sudo a2enmod headers
- 在站点虚拟主机配置或者根目录
.htaccess文件中添加如下规则:
Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, X-Token-Auth, Authorization" RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]
- 重启Apache生效:
sudo systemctl restart apache2
特殊场景处理
如果你请求的private-api是第三方外部接口,不属于你的Laravel服务,那不要直接从前端发请求,需要走后端代理:
在Laravel中新增一个本地接口,后端用HTTP客户端请求第三方接口,再把结果返回给前端,后端请求不存在浏览器跨域限制,从根源上解决跨域问题。
内容的提问来源于stack exchange,提问作者Qasim Ali
相关产品推荐
相关产品推荐

