isOptions()) { return $this->handlePreflight(); } // 处理实际请求 $response = $next($request); // 添加CORS头 return $this->addCorsHeaders($response); } /** * 处理预检请求 */ private function handlePreflight() { $response = Response::create('', 'html', 200); return $this->addCorsHeaders($response); } /** * 添加CORS头 */ private function addCorsHeaders(Response $response) { $origin = request()->header('origin', '*'); // 在生产环境中,应该验证允许的域名 // 这里为了开发方便,允许所有域名 $allowedOrigin = $origin; $response->header([ 'Access-Control-Allow-Origin' => $allowedOrigin, 'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS, PATCH', 'Access-Control-Allow-Headers' => 'Origin, X-Requested-With, Content-Type, Accept, Authorization, Cache-Control, X-CSRF-Token, X-Token, token, Token', 'Access-Control-Allow-Credentials' => 'true', 'Access-Control-Max-Age' => '86400', // 24小时 'Access-Control-Expose-Headers' => 'Authorization, Content-Disposition', ]); return $response; } }