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

Laravel 11 CORS问题:OPTIONS正常但POST请求缺失跨域响应头

解决Laravel 11 CORS配置后POST请求缺失响应头的问题

1. 修正CORS配置的格式错误

你的cors.php中allowed_methods和allowed_headers使用了字符串格式,而Laravel的CORS配置要求这两个选项为数组格式,字符串会导致解析异常,修正后配置如下:

<?php

return [
    'paths' => ['*'],
    'allowed_methods' => ['GET', 'POST', 'PUT', 'OPTIONS'], // 改为数组,每个方法单独作为元素
    'allowed_origins' => ['http://localhost:8082'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['Origin', 'Content-Type', 'X-Auth-Token', 'Cookie'], // 改为数组,清理多余空格
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => true,
];

2. 确保CORS中间件全局生效

Laravel 11默认已将HandleCors中间件加入全局中间件栈,但需确认未被意外移除:

  • 打开bootstrap/app.php,检查中间件注册代码,确保HandleCors存在且优先执行:
->withMiddleware(function (Middleware $middleware) {
    // 确保HandleCors在全局中间件列表中,建议放在靠前位置
    $middleware->append(\Illuminate\Http\Middleware\HandleCors::class);
})

如果是自定义路由分组,不要在分组中排除该中间件。

3. 排查响应提前终止的情况

如果POST请求对应的控制器方法或第三方中间件存在提前返回响应的逻辑(比如未通过权限验证直接返回错误),会导致CORS中间件无法添加响应头。确保所有响应都经过完整的Laravel中间件管道输出。

4. 清除配置缓存

修改配置后必须清除配置缓存,否则旧配置仍会生效:

php artisan config:clear

5. 验证请求响应

打开浏览器开发者工具的网络标签,查看POST请求的响应头:

  • 若仍无Access-Control-Allow-Origin头,检查服务器日志确认请求是否经过HandleCors中间件;
  • Postman不受浏览器CORS策略限制,因此能正常访问,但浏览器会严格校验响应头,必须保证实际请求的响应包含正确的CORS头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:27:07