Lumen在做前后端分离项目时,在浏览器中访问,若前后端域名不一致会导致跨域问题,简单跨域好解决。若发送的是非简单跨域,此时浏览器会先发送option请求进行预检,预检通过才发送真正的请求。此时服务端要实现option请求的接收。服务端代码实现如下:
添加如下中间件:
<?phpnamespace App\Http\Middleware;use Closure;class CrossHttp{/*** Handle an incoming request.** @param \Illuminate\Http\Request $request* @param \Closure $next* @return mixed*/public function handle($request, Closure $next){if($request->getMethod() == "OPTIONS") {$allowOrigin = ['http://192.168.1.47','http://localhost',];$Origin = $request->header("Origin");if(in_array($Origin, $allowOrigin)){return response()->json('ok', 200, [# 下面参数视request中header而定'Access-Control-Allow-Origin' => $Origin,'Access-Control-Allow-Headers' => 'x-token','Access-Control-Allow-Methods' => 'GET,POST,OPTIONS']);} else {return response()->json('fail', 405);}}$response = $next($request);$response->header('Access-Control-Allow-Origin', '*');return $response;}}
在 boostrap/app.php 里注册一下全局中间件即可完成
$app->middleware([\App\Http\Middleware\CrossHttp::class,]);
