The syntax of HTTP URIs is defined in RFC1738 section 3.3.
Note that the Ruby URI library allows HTTP URLs containing usernames and passwords. This is not legal as per the RFC, but used to be supported in Internet Explorer 5 and 6, before the MS04-004 security update. See <URL:http://support.microsoft.com/kb/834489>.
COMPONENT = [ :scheme, :userinfo, :host, :port, :path, :query, :fragment ].freeze
DEFAULT_PORT = 80