信息发布→ 登录 注册 退出

laravel如何处理CORS跨域请求问题_Laravel处理CORS跨域请求方法

发布时间:2025-10-05

点击量:
Laravel通过配置CORS中间件处理跨域请求,推荐使用Sanctum内置支持,配置config/cors.php允许源、方法和头;2. 可创建自定义CorsMiddleware添加响应头并注册到Kernel;3. 必须在路由中处理OPTIONS预检请求,可在RouteServiceProvider中统一返回200状态码,确保预检通过。

Laravel处理CORS跨域请求的核心在于正确配置中间件,确保服务器能接收并响应来自不同源的前端请求。最常见的场景是前后端分离项目中,前端运行在localhost:3000或某个域名,而后端Laravel应用运行在另一个端口或子域上,浏览器会因安全策略阻止这类请求。

使用 Laravel Sanctum 配置 CORS(推荐方式)

如果你的项目使用 Laravel Sanctum 管理 API 认证,它已经内置了对 CORS 的支持,只需简单配置即可。

  • 打开 config/cors.php 文件,设置允许的源、方法和头信息
  • 例如允许本地开发环境访问:

'domains' => [
  'http://localhost:3000',
  'https://your-frontend.com'
],
'methods' => ['*'],
'headers' => ['*'],

配置后,Sanctum 会在预检请求(OPTIONS)中自动返回正确的响应头,避免浏览器拦截。

自定义中间件处理复杂 CORS 场景

当需要更精细控制时,可创建中间件手动添加 CORS 头。

  • 执行命令生成中间件:php artisan make:middleware CorsMiddleware
  • 在 handle 方法中添加响应头:

public function handle($request, Closure $next)
{
  return $next($request)
    ->header('Access-Control-Allow-Origin', 'http://localhost:3000')
    ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
    ->header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
}

记得在 app/Http/Kernel.php 中注册该中间件,并应用到需要的路由组。

处理 OPTIONS 预检请求

浏览器在发送非简单请求前会先发一个 OPTIONS 请求,Laravel 必须正确响应,否则后续请求会被阻止。

  • 确保路由文件中有处理 OPTIONS 请求的规则
  • 可在 RouteServiceProvider 的 boot 方法中统一处理:

Route::options('{any}', function () {
  return response('', 200);
})->where('any', '.*');

这样所有未定义的 OPTIONS 请求都会返回 200,配合中间件头信息即可通过预检。

基本上就这些。只要配置好中间件和响应头,Laravel 能稳定处理各类跨域请求。关键是根据项目实际需求选择 Sanctum 或自定义方案,避免遗漏 OPTIONS 请求的处理。

标签:# 路由  # https  # http  # function  # delete  # public  # 中间件  # 开发环境  # 状态码  # 跨域  # php  # ai  # 后端  # 端口  # access  # app  # 浏览器  # 前端  # laravel  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!