header('origin')) { $domain = parse_url($origin, PHP_URL_HOST); } // 2. 再尝试 Referer elseif ($referer = $request->header('referer')) { $domain = parse_url($referer, PHP_URL_HOST); } elseif ($request->host()) { $domain = $request->host(); } else { return response('Domain not found', 401); } $corsHeaders = [ 'Access-Control-Allow-Origin' => $origin, 'Access-Control-Allow-Credentials' => 'true', 'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS, PATCH', 'Access-Control-Allow-Headers' => strtolower(implode(',', $headersKeys)), ]; // 1. LRU 进程缓存 $userId = self::$cache->get($domain); if ($userId) { $request->channels_uid = $userId; $response = $next($request); # 允许跨域 $response->withHeaders($corsHeaders); return $response; } // 2. Redis Hash $userId = Redis::hGet('domain_map', $domain); if ($userId) { self::$cache->set($domain, $userId); $request->channels_uid = $userId; $response = $next($request); # 允许跨域 $response->withHeaders($corsHeaders); return $response; } // 3. MySQL 兜底 $PluginChannelsDomain = PluginChannelsDomain::where('domain', $domain)->where('state', State::YES['value'])->find(); if ($PluginChannelsDomain) { Redis::hSet('domain_map', $domain, $PluginChannelsDomain->channels_uid); self::$cache->set($domain, $PluginChannelsDomain->channels_uid); $request->channels_uid = $PluginChannelsDomain->channels_uid; $response = $next($request); # 允许跨域 $response->withHeaders($corsHeaders); return $response; } return response('Domain not found', 401); } }