private function getRedirectUri(RequestCycle $cycle) { $request = $cycle->request; $response = $cycle->response; if (!$cycle->options[self::OP_FOLLOW_LOCATION]) { return null; } if (!$response->hasHeader('Location')) { return null; } $status = $response->getStatus(); $method = $request->getMethod(); if ($status < 200 || $status > 399 || $method === 'HEAD') { return null; } $requestUri = new Uri($request->getUri()); $redirectLocation = current($response->getHeader('Location')); if (!$requestUri->canResolve($redirectLocation)) { return null; } $newUri = $requestUri->resolve($redirectLocation); $cycle->redirectHistory[] = $request->getUri(); return $newUri; }