You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React调用Laravel 8 API提交数据时遭遇CORS策略问题求助

问题排查与解决方案

核心原因

浏览器的CORS策略对非简单请求(比如携带multipart/form-data的POST)会发送预检OPTIONS请求,而你的Laravel API未正确处理该请求,或者CORS配置未覆盖这类请求规则。VSCode Rest Client不属于浏览器环境,不受CORS策略限制,因此能正常请求。

解决方案步骤

1. 检查并更新Laravel的CORS配置

打开项目根目录下的config/cors.php,确保配置覆盖你的API路由与请求规则:

return [
    'paths' => ['api/*'], // 匹配你的API路由前缀
    'allowed_methods' => ['*'], // 允许所有请求方法(含POST、OPTIONS)
    'allowed_origins' => ['http://localhost:3000'], // 允许你的React应用域名
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'], // 允许所有请求头,适配FormData的Content-Type
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => false,
];

2. 确保CORS中间件应用到API路由

打开app/Http/Kernel.php,确认api中间件组包含HandleCors中间件:

protected $middlewareGroups = [
    'web' => [
        // ... 其他中间件
    ],

    'api' => [
        \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Http\Middleware\HandleCors::class, // 确保此行存在
    ],
];

3. 清理缓存并重启服务

执行命令刷新配置缓存,确保新配置生效:

php artisan config:cache
php artisan serve

4. React端Axios配置校验(可选)

若上述配置后仍有问题,确保Axios配置与Laravel的CORS规则一致:

try {
   const response = await axios.post(
       "http://localhost:8000/api/esi/survey/store",
       formData,
       { withCredentials: false } // 与Laravel的supports_credentials保持一致
   );
   console.log(response);
} catch(e) {
   console.error(e);
}

补充说明:GET请求正常的原因

GET属于简单请求,浏览器不会发送预检OPTIONS请求,仅在响应头检查Access-Control-Allow-Origin即可;而携带multipart/form-data的POST属于非简单请求,必须先通过OPTIONS预检请求的验证,才会发送实际的POST请求。

内容的提问来源于stack exchange,提问作者Rido

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:57:18