public static function fromString($uri)
        {
            if (is_string($uri) === false) {
                throw new Exception('$uri is not a string');
            }

            $uri            = explode(':', $uri, 2);
            $scheme         = strtolower($uri[0]);
            $schemeSpecific = isset($uri[1]) === true ? $uri[1] : '';

            if (in_array($scheme, array('http', 'https')) === false) {
                throw new Exception("Invalid scheme: '$scheme'");
            }

            $schemeHandler = new Http($scheme, $schemeSpecific);

            return $schemeHandler;
        }