3 Protocol Parameters

3.1 HTTP Version

   HTTP uses a "." numbering scheme to indicate versions
   of the protocol. The protocol versioning policy is intended to allow
   the sender to indicate the format of a message and its capacity for
   understanding further HTTP communication, rather than the features
   obtained via that communication. No change is made to the version
   number for the addition of message components which do not affect
   communication behavior or which only add to extensible field values.
   The  number is incremented when the changes made to the
   protocol add features which do not change the general message parsing
   algorithm, but which may add to the message semantics and imply
   additional capabilities of the sender. The  number is
   incremented when the format of a message within the protocol is
   changed.

   The version of an HTTP message is indicated by an HTTP-Version field
   in the first line of the message.

          HTTP-Version   = "HTTP" "/" 1*DIGIT "." 1*DIGIT

   Note that the major and minor numbers MUST be treated as separate
   integers and that each may be incremented higher than a single digit.
   Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in turn is
   lower than HTTP/12.3. Leading zeros MUST be ignored by recipients and
   MUST NOT be sent.

   Applications sending Request or Response messages, as defined by this
   specification, MUST include an HTTP-Version of "HTTP/1.1". Use of
   this version number indicates that the sending application is at
   least conditionally compliant with this specification.

   The HTTP version of an application is the highest HTTP version for
   which the application is at least conditionally compliant.



Fielding, et. al.           Standards Track                    [Page 17]

RFC 2068                        HTTP/1.1                    January 1997


   Proxy and gateway applications must be careful when forwarding
   messages in protocol versions different from that of the application.
   Since the protocol version indicates the protocol capability of the
   sender, a proxy/gateway MUST never send a message with a version
   indicator which is greater than its actual version; if a higher
   version request is received, the proxy/gateway MUST either downgrade
   the request version, respond with an error, or switch to tunnel
   behavior. Requests with a version lower than that of the
   proxy/gateway's version MAY be upgraded before being forwarded; the
   proxy/gateway's response to that request MUST be in the same major
   version as the request.

     Note: Converting between versions of HTTP may involve modification
     of header fields required or forbidden by the versions involved.

3.2 Uniform Resource Identifiers

   URIs have been known by many names: WWW addresses, Universal Document
   Identifiers, Universal Resource Identifiers , and finally the
   combination of Uniform Resource Locators (URL)  and Names (URN). As
   far as HTTP is concerned, Uniform Resource Identifiers are simply
   formatted strings which identify--via name, location, or any other
   characteristic--a resource.

3.2.1 General Syntax

   URIs in HTTP can be represented in absolute form or relative to some
   known base URI, depending upon the context of their use. The two
   forms are differentiated by the fact that absolute URIs always begin
   with a scheme name followed by a colon.

          URI            = ( absoluteURI | relativeURI ) [ "#" fragment ]

          absoluteURI    = scheme ":" *( uchar | reserved )

          relativeURI    = net_path | abs_path | rel_path

          net_path       = "//" net_loc [ abs_path ]
          abs_path       = "/" rel_path
          rel_path       = [ path ] [ ";" params ] [ "?" query ]

          path           = fsegment *( "/" segment )
          fsegment       = 1*pchar
          segment        = *pchar

          params         = param *( ";" param )
          param          = *( pchar | "/" )




Fielding, et. al.           Standards Track                    [Page 18]

RFC 2068                        HTTP/1.1                    January 1997


          scheme         = 1*( ALPHA | DIGIT | "+" | "-" | "." )
          net_loc        = *( pchar | ";" | "?" )

          query          = *( uchar | reserved )
          fragment       = *( uchar | reserved )

          pchar          = uchar | ":" | "@" | "&" | "=" | "+"
          uchar          = unreserved | escape
          unreserved     = ALPHA | DIGIT | safe | extra | national

          escape         = "%" HEX HEX
          reserved       = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+"
          extra          = "!" | "*" | "'" | "(" | ")" | ","
          safe           = "$" | "-" | "_" | "."
          unsafe         = CTL | SP | <"> | "#" | "%" | "<" | ">"
          national       =