Laravel 10与ReactJS部署后出现No 'Access-Control-Allow-Origin'跨域错误
解决Laravel 10 + React部署Windows服务器的跨域问题
先对照你给出的配置,有几个核心问题导致了CORS错误,按以下步骤逐一修复:
1. 修复.env文件的URL拼写错误
你的Laravel .env 里 FRONTEND_URL 少了一个斜杠,这会直接导致CORS配置读取无效的源地址:
# 错误配置 FRONTEND_URL=https:/webapp.mydomain.com
修改为正确格式:
FRONTEND_URL=https://webapp.mydomain.com
2. 移除web.config中的CORS自定义头,避免冲突
你同时在IIS的web.config和Laravel的CORS中间件里配置了跨域头,会导致响应头重复、预请求逻辑混乱。删掉web.config里的<httpProtocol>下CORS配置块:
<!-- 移除这段配置 --> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="https://webapp.mydomain.com" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" /> <add name="Access-Control-Allow-Credentials" value="true" /> </customHeaders> </httpProtocol>
让Laravel的CORS中间件统一处理跨域逻辑即可。
3. 确认CORS中间件的应用范围
打开app/Http/Kernel.php,检查$middleware全局中间件数组里是否包含\Illuminate\Http\Middleware\HandleCors::class,如果没有就添加进去;
如果不想全局启用,也可以在web.php里给sign-in这类非api/*路由单独绑定CORS中间件:
Route::post('/sign-in', [AuthController::class, 'signIn'])->middleware('cors');
4. 清除Laravel缓存,确保配置生效
在服务器上执行以下命令刷新配置缓存:
php artisan config:clear php artisan cache:clear php artisan route:clear
Windows服务器可通过命令行或部署工具执行这些命令。
5. 确保IIS正确处理OPTIONS预请求
跨域预请求用的是OPTIONS方法,需确保IIS不会拦截这个请求,可在web.config的<system.webServer>下添加:
<handlers> <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" responseBufferLimit="4194304" /> </handlers>
完成以上操作后,重启IIS和Laravel应用,再测试前端API调用即可解决跨域问题。
内容的提问来源于stack exchange,提问作者Lemmuel Lapuz
相关产品推荐
相关产品推荐

