header('origin', ''); $origin = trim(str_replace(["\r", "\n"], '', $origin)); $requestedHeaders = $request->header('access-control-request-headers', ''); $requestedHeaders = trim(str_replace(["\r", "\n"], '', $requestedHeaders)); $allowedHeaders = [ 'Origin', 'X-Requested-With', 'Content-Type', 'Accept', 'Authorization', 'AuthToken', 'SessionId', 'Lang', 'Accept-Language', 'ClientId', 'Cid', 'X-Im-AppId', 'X-Im-Sign', 'X-Im-TimeStamp', ]; if ($requestedHeaders !== '') { $allowedHeaders[] = $requestedHeaders; } $headers = [ 'Access-Control-Allow-Origin' => $origin === '' ? '*' : $origin, 'Access-Control-Allow-Methods' => 'GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD', 'Access-Control-Allow-Headers' => implode(', ', $allowedHeaders), 'Access-Control-Expose-Headers' => '*', 'Access-Control-Max-Age' => '86400', ]; if ($origin !== '') { $headers['Access-Control-Allow-Credentials'] = 'true'; $headers['Vary'] = 'Origin'; } if ($request->header('access-control-request-private-network') === 'true') { $headers['Access-Control-Allow-Private-Network'] = 'true'; } return $headers; } public function handle($request, Closure $next) { $headers = self::headers($request); if (strtoupper($request->method()) === 'OPTIONS') { return Response::create('', 'html', 204)->header($headers); } return $next($request)->header($headers); } }