基于Clean-Laravel-Api的Laravel 8 API接口CORS跨域问题求解
解决步骤
- 先移除冲突配置:删除你自定义的CORS中间件、删除
public/index.php中手动加的header代码,避免多套跨域逻辑冲突导致响应头不生效。 - 调整Fruitcake中间件顺序:在
Infrastructure/Http/Kernel.php的全局中间件数组中,将\Fruitcake\Cors\HandleCors::class移到数组第一位,确保所有请求最先经过跨域处理,避免前面的中间件提前返回响应时不带跨域头。 - 发布并配置Fruitcake配置文件:
- 执行命令发布配置:
php artisan vendor:publish --tag="cors" - 打开生成的
config/cors.php,做以下修改:// 放行所有匹配路径的接口,可按你实际接口路径调整 'paths' => ['api/*'], // 测试阶段先允许所有来源,上线后替换为实际业务域名 'allowed_origins' => ['*'], 'allowed_methods' => ['*'], 'allowed_headers' => ['*'], // 不需要跨域传Cookie/凭证时保持false即可 'supports_credentials' => false,
- 执行命令发布配置:
- 清理Laravel缓存:执行
php artisan config:clear && php artisan route:clear,确保新配置生效。 - 排查web服务器配置:如果上述配置完成后依旧报错,检查Nginx/Apache是否拦截了OPTIONS预检请求,可直接用Postman发起OPTIONS请求到你的接口地址,验证响应头是否携带
Access-Control-Allow-Origin字段。
内容的提问来源于stack exchange,提问作者Nerpianicolindo
相关产品推荐
相关产品推荐

