<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
 "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
 <HEAD>
  <TITLE>Common Gateway Interface - 1.1 *Draft 03* [http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html]
  </TITLE>
<!--#if expr="$HTTP_USER_AGENT != /Lynx/" -->
 <!--#set var="GUI" value="1" -->
<!--#endif -->
  <LINK HREF="mailto:Ken.Coar@Golux.Com" rev="revised">
  <LINK REL="STYLESHEET" HREF="cgip-style-rfc.css" TYPE="text/css">
  <META name="latexstyle" content="rfc">
  <META name="author" content="Ken A L Coar">
  <META name="institute" content="IBM Corporation">
  <META name="date" content="25 June 1999">
  <META name="expires" content="Expires 31 December 1999">
  <META name="document" content="INTERNET-DRAFT">
  <META name="file" content="&lt;draft-coar-cgi-v11-03.txt&gt;">
  <META name="group" content="INTERNET-DRAFT">
<!--
    There are a lot of BNF fragments in this document.  To make it work
    in all possible browsers (including Lynx, which is used to turn it
    into text/plain), we handle these by using PREformatted blocks with
    a universal internal margin of 2, inside one-level DL blocks.
 -->
 </HEAD>
 <BODY>
  <!--
    HTML doesn't do paper pagination, so we need to fake it out.  Basing
    our formatting upon RFC2068, there are four (4) lines of header and
    four (4) lines of footer for each page.

<DIV ALIGN="CENTER">
 <PRE>




Coar, et al.               CGI/1.1 Specification                     May, 1998
INTERNET-DRAFT             Expires 1 December 1998                    [Page 2]


 </PRE>
</DIV>
  -->
  <!--
    The following weirdness wrt non-breaking spaces is to get Lynx
    (which is barely TABLE-aware) to line the left/right justified
    text up properly.
  -->
  <DIV ALIGN="CENTER">
   <TABLE WIDTH="100%" CELLPADDING=0 CELLSPACING=0>
    <TR VALIGN="TOP">
     <TD ALIGN="LEFT">
      INTERNET-DRAFT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     </TD>
     <TD ALIGN="RIGHT">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ken A L Coar
     </TD>
    </TR>
    <TR VALIGN="TOP">
     <TD ALIGN="LEFT">
      draft-coar-cgi-v11-03.{html,txt}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     </TD>
     <TD ALIGN="RIGHT">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM Corporation
     </TD>
    </TR>
    <TR VALIGN="TOP">
     <TD ALIGN="LEFT">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     </TD>
     <TD ALIGN="RIGHT">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D.R.T. Robinson
     </TD>
    </TR>
    <TR VALIGN="TOP">
     <TD ALIGN="LEFT">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     </TD>
     <TD ALIGN="RIGHT">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E*TRADE&nbsp;UK&nbsp;Ltd.
     </TD>
    </TR>
    <TR VALIGN="TOP">
     <TD ALIGN="LEFT">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     </TD>
     <TD ALIGN="RIGHT">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25 June 1999
     </TD>
    </TR>
   </TABLE>
  </DIV>

  <H1 ALIGN="CENTER">
   The WWW Common Gateway Interface
   <BR>
   Version 1.1
  </H1>

<!--#include virtual="I-D-statement" -->

  <H2>
   <A NAME="Abstract">
    Abstract
   </A>
  </H2>
  <P>
  The Common Gateway Interface (CGI) is a simple interface for running
  external programs, software or gateways under an information server
  in a platform-independent manner. Currently, the supported information
  servers are HTTP servers.
  </P>
  <P>
  The interface has been in use by the World-Wide Web since 1993. This
  specification defines the
  "current practice" parameters of the
  'CGI/1.1' interface developed and documented at the U.S. National
  Centre for Supercomputing Applications [NCSA-CGI].
  This document also defines the use of the CGI/1.1 interface
  on the Unix and AmigaDOS(tm) systems.
  </P>
  <P>
  Discussion of this draft occurs on the CGI-WG mailing list; see the
  project Web page at
  <SAMP>&lt;URL:<A HREF="http://CGI-Spec.Golux.Com/"
                >http://CGI-Spec.Golux.Com/</A>&gt;</SAMP>
  for details on the mailing list and the status of the project.
  </P>

<!--#if expr="$GUI" -->
  <H2>
   Revision History
  </H2>
  <P>
  The revision history of this draft is being maintained using Web-based
  GUI notation, such as struck-through characters and colour-coded
  sections.  The following legend describes how to determine the origin
  of a particular revision according to the colour of the text:
  </P>
  <DL COMPACT>
   <DT>Black
   </DT>
   <DD>Revision 00, released 28 May 1998
   </DD>
   <DT>Green
   </DT>
   <DD>Revision 01, released 28 December 1998
    <BR>
    Major structure change: Section 4, "Request Metadata (Meta-Variables)"
    was moved entirely under <A HREF="#7.0">Section 7</A>, "Data Input to the
    CGI Script."
    Due to the size of this change, it is noted here and the text in its
    former location does <EM>not</EM> appear as struckthrough.  This has
    caused major <A HREF="#6.0">sections 5</A> and following to decrement
    by one.  Other
    large text movements are likewise not marked up.  References to RFC
    1738 were changed to 2396 (1738's replacement).
   </DD>
   <DT>Red
   </DT>
   <DD>Revision 02, released 2 April, 1999
    <BR>
    Added text to <A HREF="#8.3">section 8.3</A> defining correct handling
    of HTTP/1.1
    requests using "chunked" Transfer-Encoding.  Labelled metavariable
    names in <A HREF="#8.0">section 8</A> with the appropriate detail section
    numbers.
    Clarified allowed usage of <SAMP>Status</SAMP> and
    <SAMP>Location</SAMP> response header fields.  Included new
    Internet-Draft language.
   </DD>
   <DT>Fuchsia
   </DT>
   <DD>Revision 03, released 25 June 1999
    <BR>
    Changed references from "HTTP" to "Protocol-Specific" for the listing of
    things like HTTP_ACCEPT.  Changed 'entity-body' and 'content-body' to
    'message-body.'  Added a note that response headers must comply with
    requirements of the protocol level in use.  Added a lot of stuff about
    security (section 11).  Clarified a bunch of productions.  Pointed out
    that zero-length and omitted values are indistinguishable in this
    specification.  Clarified production describing order of fields in
    script response header.  Clarified issues surrounding encoding of
    data.  Acknowledged additional contributors, and changed one of
    the authors' addresses.
   </DD>
  </DL>
<!--#endif -->

  <H2>
   <A NAME="Contents">
    Table of Contents
   </A>
  </H2>
  <DIV ALIGN="CENTER">
   <PRE>
  1 Introduction..............................................<A
                                                               HREF="#1.0"
                                                              >TBD</A>
   1.1 Purpose................................................<A
                                                               HREF="#1.1"
                                                              >TBD</A>
   1.2 Requirements...........................................<A
                                                               HREF="#1.2"
                                                              >TBD</A>
   1.3 Specifications.........................................<A
                                                               HREF="#1.3"
                                                              >TBD</A>
   1.4 Terminology............................................<A
                                                               HREF="#1.4"
                                                              >TBD</A>
  2 Notational Conventions and Generic Grammar................<A
                                                               HREF="#2.0"
                                                              >TBD</A>
   2.1 Augmented BNF..........................................<A
                                                               HREF="#2.1"
                                                              >TBD</A>
   2.2 Basic Rules............................................<A
                                                               HREF="#2.2"
                                                              >TBD</A>
  3 Protocol Parameters.......................................<A
                                                               HREF="#3.0"
                                                              >TBD</A>
   3.1 URL Encoding...........................................<A
                                                               HREF="#3.1"
                                                              >TBD</A>
   3.2 The Script-URI.........................................<A
                                                               HREF="#3.2"
                                                              >TBD</A>
  4 Invoking the Script.......................................<A
                                                               HREF="#4.0"
                                                              >TBD</A>
  5 The CGI Script Command Line...............................<A
                                                               HREF="#5.0"
                                                              >TBD</A>
  6 Data Input to the CGI Script..............................<A
                                                               HREF="#6.0"
                                                              >TBD</A>
   6.1 Request Metadata (Metavariables).......................<A
                                                               HREF="#6.1"
                                                              >TBD</A>
    6.1.1 AUTH_TYPE...........................................<A
                                                               HREF="#6.1.1"
                                                              >TBD</A>
    6.1.2 CONTENT_LENGTH......................................<A
                                                               HREF="#6.1.2"
                                                              >TBD</A>
    6.1.3 CONTENT_TYPE........................................<A
                                                               HREF="#6.1.3"
                                                              >TBD</A>
    6.1.4 GATEWAY_INTERFACE...................................<A
                                                               HREF="#6.1.4"
                                                              >TBD</A>
    6.1.5 Protocol-Specific Metavariables.....................<A
                                                               HREF="#6.1.5"
                                                              >TBD</A>
    6.1.6 PATH_INFO...........................................<A
                                                               HREF="#6.1.6"
                                                              >TBD</A>
    6.1.7 PATH_TRANSLATED.....................................<A
                                                               HREF="#6.1.7"
                                                              >TBD</A>
    6.1.8 QUERY_STRING........................................<A
                                                               HREF="#6.1.8"
                                                              >TBD</A>
    6.1.9 REMOTE_ADDR.........................................<A
                                                               HREF="#6.1.9"
                                                              >TBD</A>
    6.1.10 REMOTE_HOST........................................<A
                                                               HREF="#6.1.10"
                                                              >TBD</A>
    6.1.11 REMOTE_IDENT.......................................<A
                                                               HREF="#6.1.11"
                                                              >TBD</A>
    6.1.12 REMOTE_USER........................................<A
                                                               HREF="#6.1.12"
                                                              >TBD</A>
    6.1.13 REQUEST_METHOD.....................................<A
                                                               HREF="#6.1.13"
                                                              >TBD</A>
    6.1.14 SCRIPT_NAME........................................<A
                                                               HREF="#6.1.14"
                                                              >TBD</A>
    6.1.15 SERVER_NAME........................................<A
                                                               HREF="#6.1.15"
                                                              >TBD</A>
    6.1.16 SERVER_PORT........................................<A
                                                               HREF="#6.1.16"
                                                              >TBD</A>
    6.1.17 SERVER_PROTOCOL....................................<A
                                                               HREF="#6.1.17"
                                                              >TBD</A>
    6.1.18 SERVER_SOFTWARE....................................<A
                                                               HREF="#6.1.18"
                                                              >TBD</A>
    6.2 Request Message-Bodies................................<A
                                                               HREF="#6.2"
                                                              >TBD</A>
  7 Data Output from the CGI Script...........................<A
                                                               HREF="#7.0"
                                                              >TBD</A>
   7.1 Non-Parsed Header Output...............................<A
                                                               HREF="#7.1"
                                                              >TBD</A>
   7.2 Parsed Header Output...................................<A
                                                               HREF="#7.2"
                                                              >TBD</A>
    7.2.1 CGI header fields...................................<A
                                                               HREF="#7.2.1"
                                                              >TBD</A>
     7.2.1.1 Content-Type.....................................<A
                                                               HREF="#7.2.1.1"
                                                              >TBD</A>
     7.2.1.2 Location.........................................<A
                                                               HREF="#7.2.1.2"
                                                              >TBD</A>
     7.2.1.3 Status...........................................<A
                                                               HREF="#7.2.1.3"
                                                              >TBD</A>
     7.2.1.4 Extension header fields..........................<A
                                                               HREF="#7.2.1.3"
                                                              >TBD</A>
    7.2.2 HTTP header fields..................................<A
                                                               HREF="#7.2.2"
                                                              >TBD</A>
  8 Server Implementation.....................................<A
                                                               HREF="#8.0"
                                                              >TBD</A>
   8.1 Requirements for Servers...............................<A
                                                               HREF="#8.1"
                                                              >TBD</A>
    8.1.1 Script-URI..........................................<A
                                                               HREF="#8.1"
                                                              >TBD</A>
    8.1.2 Request Message-body Handling.......................<A
                                                               HREF="#8.1.2"
                                                              >TBD</A>
    8.1.3 Required Metavariables..............................<A
                                                               HREF="#8.1.3"
                                                              >TBD</A>
    8.1.4 Response Compliance.................................<A
                                                               HREF="#8.1.4"
                                                              >TBD</A>
   8.2 Recommendations for Servers............................<A
                                                               HREF="#8.2"
                                                              >TBD</A>
   8.3 Summary of Metavariables...............................<A
                                                               HREF="#8.3"
                                                              >TBD</A>
  9 Script Implementation.....................................<A
                                                               HREF="#9.0"
                                                              >TBD</A>
   9.1 Requirements for Scripts...............................<A
                                                               HREF="#9.1"
                                                              >TBD</A>
   9.2 Recommendations for Scripts............................<A
                                                               HREF="#9.2"
                                                              >TBD</A>
  10 System Specifications....................................<A
                                                               HREF="#10.0"
                                                              >TBD</A>
   10.1 AmigaDOS..............................................<A
                                                               HREF="#10.1"
                                                              >TBD</A>
   10.2 Unix..................................................<A
                                                               HREF="#10.2"
                                                              >TBD</A>
  11 Security Considerations..................................<A
                                                               HREF="#11.0"
                                                              >TBD</A>
   11.1 Safe Methods..........................................<A
                                                               HREF="#11.1"
                                                              >TBD</A>
   11.2 HTTP Header Fields Containing Sensitive Information...<A
                                                               HREF="#11.2"
                                                              >TBD</A>
   11.3 Script Interference with the Server...................<A
                                                               HREF="#11.3"
                                                              >TBD</A>
   11.4 Data Length and Buffering Considerations..............<A
                                                               HREF="#11.4"
                                                              >TBD</A>
   11.5 Stateless Processing..................................<A
                                                               HREF="#11.5"
                                                              >TBD</A>
  12 Acknowledgments..........................................<A
                                                               HREF="#12.0"
                                                              >TBD</A>
  13 References...............................................<A
                                                               HREF="#13.0"
                                                              >TBD</A>
  14 Authors' Addresses.......................................<A
                                                               HREF="#14.0"
                                                              >TBD</A>
     </PRE>
  </DIV>

  <H2>
   <A NAME="1.0">
    1. Introduction
   </A>
  </H2>

  <H3>
   <A NAME="1.1">
    1.1. Purpose
   </A>
  </H3>
  <P>
  Together the HTTP [<A HREF="#[3]">3</A>,<A HREF="#[8]">8</A>] server
  and the CGI script are responsible
  for servicing a client
  request by sending back responses. The client
  request comprises a Universal Resource Identifier (URI)
  [<A HREF="#[1]">1</A>], a
  request method, and various ancillary
  information about the request
  provided by the transport mechanism.
  </P>
  <P>
  The CGI defines the abstract parameters, known as
  metavariables,
  which describe the client's
  request. Together with a
  concrete programmer interface this specifies a platform-independent
  interface between the script and the HTTP server.
  </P>

  <H3>
   <A NAME="1.2">
    1.2. Requirements
   </A>
  </H3>
  <P>
  This specification uses the same words as RFC 1123
  [<A HREF="#[5]">5</A>] to define the
  significance of each particular requirement. These are:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <DL>
   <DT><EM>MUST</EM>
   </DT>
   <DD>
    <P>
    This word or the adjective 'required' means that the item is an
    absolute requirement of the specification.
    </P>
   </DD>
   <DT><EM>SHOULD</EM>
   </DT>
   <DD>
    <P>
    This word or the adjective 'recommended' means that there may
    exist valid reasons in particular circumstances to ignore this
    item, but the full implications should be understood and the case
    carefully weighed before choosing a different course.
    </P>
   </DD>
   <DT><EM>MAY</EM>
   </DT>
   <DD>
    <P>
    This word or the adjective 'optional' means that this item is
    truly optional. One vendor may choose to include the item because
    a particular marketplace requires it or because it enhances the
    product, for example; another vendor may omit the same item.
    </P>
   </DD>
  </DL>
  <P>
  An implementation is not compliant if it fails to satisfy one or more
  of the 'must' requirements for the protocols it implements. An
  implementation that satisfies all of the 'must' and all of the
  'should' requirements for its features is said to be 'unconditionally
  compliant'; one that satisfies all of the 'must' requirements but not
  all of the 'should' requirements for its features is said to be
  'conditionally compliant.'
  </P>

  <H3>
   <A NAME="1.3">
    1.3. Specifications
   </A>
  </H3>
  <P>
  Not all of the functions and features of the CGI are defined in the
  main part of this specification. The following phrases are used to
  describe the features which are not specified:
  </P>
  <DL>
   <DT><EM>system defined</EM>
   </DT>
   <DD>
    <P>
    The feature may differ between systems, but must be the same for
    different implementations using the same system. A system will
    usually identify a class of operating-systems. Some systems are
    defined in
    <A HREF="#10.0"
    >section 10</A> of this document.
    New systems may be defined
    by new specifications without revision of this document.
    </P>
   </DD>
   <DT><EM>implementation defined</EM>
   </DT>
   <DD>
    <P>
    The behaviour of the feature may vary from implementation to
    implementation, but a particular implementation must document its
    behaviour.
    </P>
   </DD>
  </DL>

  <H3>
   <A NAME="1.4">
    1.4. Terminology
   </A>
  </H3>
  <P>
  This specification uses many terms defined in the HTTP/1.1
  specification [<A HREF="#[8]">8</A>]; however, the following terms are
  used here in a
  sense which may not accord with their definitions in that document,
  or with their common meaning.
  </P>

  <DL>
   <DT><EM>metavariable</EM>
   </DT>
   <DD>
    <P>
    A named parameter that carries information from the server to the
    script. It is not necessarily a variable in the operating-system's
    environment, although that is the most common implementation.
    </P>
   </DD>

   <DT><EM>script</EM>
   </DT>
   <DD>
    <P>
    The software which is invoked by the server <EM>via</EM> this
    interface. It
    need not be a standalone program, but could be a
    dynamically-loaded or shared library, or even a subroutine in the
    server.  It <EM>may</EM> be a set of statements
    interpreted at run-time, as the term 'script' is frequently
    understood, but that is not a requirement and within the context
    of this specification the term has the broader definition stated.
    </P>
   </DD>
   <DT><EM>server</EM>
   </DT>
   <DD>
    <P>
    The application program which invokes the script in order to service
    requests.
    </P>
   </DD>
  </DL>

  <H2>
   <A NAME="2.0">
    2. Notational Conventions and Generic Grammar
   </A>
  </H2>

  <H3>
   <A NAME="2.1">
    2.1. Augmented BNF
   </A>
  </H3>
  <P>
  All of the mechanisms specified in this document are described in
  both prose and an augmented Backus-Naur Form (BNF) similar to that
  used by RFC 822 [<A HREF="#[6]">6</A>]. This augmented BNF contains
  the following constructs:
  </P>
  <DL>
   <DT>name = definition
   </DT>
   <DD>
    <P>
    The
    definition by the equal character ("="). Whitespace is only
    significant in that continuation lines of a definition are
    indented.
    </P>
   </DD>
   <DT>"literal"
   </DT>
   <DD>
    <P>
    Quotation marks (") surround literal text, except for a literal
    quotation mark, which is surrounded by angle-brackets ("&lt;" and "&gt;").
    Unless stated otherwise, the text is case-sensitive.
    </P>
   </DD>
   <DT>rule1 | rule2
   </DT>
   <DD>
    <P>
    Alternative rules are separated by a vertical bar ("|").
    </P>
   </DD>
   <DT>(rule1 rule2 rule3)
   </DT>
   <DD>
    <P>
    Elements enclosed in parentheses are treated as a single element.
    </P>
   </DD>
   <DT>*rule
   </DT>
   <DD>
    <P>
    A rule preceded by an asterisk ("*") may have zero or more
    occurrences. A rule preceded by an integer followed by an asterisk
    must occur at least the specified number of times.
    </P>
   </DD>
   <DT>[rule]
   </DT>
   <DD>
    <P>
    An element enclosed in square
    brackets ("[" and "]") is optional.
    </P>
   </DD>
  </DL>

  <H3>
   <A NAME="2.2">
    2.2. Basic Rules
   </A>
  </H3>
  <P>
  The following rules are used throughout this specification to
  describe basic parsing constructs.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    alpha         = lowalpha | hialpha
    alphanum      = alpha | digit
    lowalpha      = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h"
                    | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p"
                    | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x"
                    | "y" | "z"
    hialpha       = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H"
                    | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P"
                    | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X"
                    | "Y" | "Z"
    digit         = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7"
                    | "8" | "9"
    hex           = digit | "A" | "B" | "C" | "D" | "E" | "F" | "a"
                    | "b" | "c" | "d" | "e" | "f"
    escaped       = "%" hex hex
    OCTET         = &lt;any 8-bit sequence of data&gt;
    CHAR          = &lt;any US-ASCII character (octets 0 - 127)&gt;
    CTL           = &lt;any US-ASCII control character
                    (octets 0 - 31) and DEL (127)&gt;
    CR            = &lt;US-ASCII CR, carriage return (13)&gt;
    LF            = &lt;US-ASCII LF, linefeed (10)&gt;
    SP            = &lt;US-ASCII SP, space (32)&gt;
    HT            = &lt;US-ASCII HT, horizontal tab (9)&gt;
    NL            = CR | LF
    LWSP          = SP | HT | NL
    tspecial      = "(" | ")" | "@" | "," | ";" | ":" | "\" | &lt;"&gt;
                    | "/" | "[" | "]" | "?" | "&lt;" | "&gt;" | "{" | "}"
                    | SP | HT | NL
    token         = 1*&lt;any CHAR except CTLs or tspecials&gt;
    quoted-string = ( &lt;"&gt; *qdtext &lt;"&gt; ) | ( "&lt;" *qatext "&gt;")
    qdtext        = &lt;any CHAR except &lt;"&gt; and CTLs but including LWSP&gt;
    qatext        = &lt;any CHAR except "&lt;", "&gt;" and CTLs but
                    including LWSP&gt;
    mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
    unreserved    = alphanum | mark
    reserved      = ";" | "/" | "?" | ":" | "@" | "&amp;" | "=" |
                    "$" | ","
    uric          = reserved | unreserved | escaped
  </PRE>
  <P>
  Note that newline (NL) need not be a single character, but can be a
  character sequence.
  </P>

  <H2>
   <A NAME="3.0">
    3. Protocol Parameters
   </A>
  </H2>

  <H3>
   <A NAME="3.1">
    3.1. URL Encoding
   </A>
  </H3>
  <P>
  Some variables and constructs used here are described as being
  'URL-encoded'. This encoding is described in section
  2 of RFC
  2396
  [<A HREF="#[4]">4</A>].
  </P>
  <P>
  An alternate "shortcut" encoding for representing the space
  character exists and is in common use.  Scripts MUST be prepared to
  recognise both '+' and '%20' as an encoded space in a
  URL-encoded value.
  </P>
  <P>
  Note that some unsafe characters may have different semantics if
  they are encoded. The definition of which characters are unsafe
  depends on the context.
  For example, the following two URLs do not
  necessarily refer to the same resource:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    http://somehost.com/somedir%2Fvalue
    http://somehost.com/somedir/value
  </PRE>
  <P>
  See section
  2 of RFC
  2396 [<A HREF="#[4]">4</A>]
  for authoritative treatment of this issue.
  </P>

  <H3>
   <A NAME="3.2">
    3.2. The Script-URI
   </A>
  </H3>
  <P>
  The 'Script-URI' is defined as the URI of the resource identified
  by the metavariables.   Often,
  this URI will be the same as
  the URI requested by the client (the 'Client-URI'); however, it need
  not be. Instead, it could be a URI invented by the server, and so it
  can only be used in the context of the server and its CGI interface.
  </P>
  <P>
  The Script-URI has the syntax of generic-RL as defined in section 2.1
  of RFC 1808 [<A HREF="#[7]">7</A>], with the exception that object
  parameters and
  fragment identifiers are not permitted:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    &lt;scheme&gt;://&lt;host&gt;&lt;port&gt;/&lt;path&gt;?&lt;query&gt;
  </PRE>
  <P>
  The various components of the
  Script-URI
  are defined by some of the
  metavariables (see
  <A HREF="#4.0">section 4</A>
  below);
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    script-uri = protocol "://" SERVER_NAME ":" SERVER_PORT enc-script
                 enc-path-info "?" QUERY_STRING
  </PRE>
  <P>
  where 'protocol' is obtained
  from SERVER_PROTOCOL, 'enc-script' is a
  URL-encoded version of SCRIPT_NAME and 'enc-path-info' is a
  URL-encoded version of PATH_INFO.  See
  <A HREF="#4.6">section 4.6</A> for more information about the PATH_INFO
  metavariable.
  </P>
  <P>
  Note that the scheme and the protocol are <EM>not</EM> identical;
  for instance, a resource accessed <EM>via</EM> an SSL mechanism
  may have a Client-URI with a scheme of "<SAMP>https</SAMP>"
  rather than "<SAMP>http</SAMP>".   CGI/1.1 provides no means
  for the script to reconstruct this, and therefore
  the Script-URI includes the base protocol used.
  </P>

  <H2>
   <A NAME="4.0">
    4. Invoking the Script
   </A>
  </H2>
  <P>
  The
  script is invoked in a system defined manner. Unless specified
  otherwise, the file containing the script will be invoked as an
  executable program.
  </P>

  <H2>
   <A NAME="5.0">
    5. The CGI Script Command Line
   </A>
  </H2>
  <P>
  Some systems support a method for supplying an array of strings to
  the CGI script. This is only used in the case of an 'indexed' query.
  This is identified by a "GET" or "HEAD" HTTP request with a URL
  query
  string not containing any unencoded "=" characters. For such a
  request,
  servers SHOULD parse the search string
  into words, using the following rules:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    search-string = search-word *( "+" search-word )
    search-word   = 1*schar
    schar         = xunreserved | escaped | xreserved
    xunreserved   = alpha | digit | xsafe | extra
    xsafe         = "$" | "-" | "_" | "."
    xreserved     = ";" | "/" | "?" | ":" | "@" | "&"
  </PRE>
  <P>
  After parsing, each word is URL-decoded, optionally encoded in a
  system defined manner,
  and then the argument list is set to the list
  of words.
  </P>
  <P>
  If the server cannot create any part of the argument list, then the
  server SHOULD NOT generate any command line information. For example, the
  number of arguments may be greater than operating system or server
  limitations permit, or one of the words may not be representable as an
  argument.
  </P>
  <P>
  Scripts SHOULD check to see if the QUERY_STRING value contains an
  unencoded "=" character, and SHOULD NOT use the command line arguments
  if it does.
  </P>

  <H2>
   <A NAME="6.0">
    6. Data Input to the CGI Script
   </A>
  </H2>
  <P>
  Information about a request comes from two different sources: the
  request header, and any associated
  message-body.
  Servers MUST
  make portions of this information available to
   scripts.
  </P>

  <H3>
   <A NAME="6.1">
    6.1. Request Metadata
    (Metavariables)
   </A>
  </H3>
  <P>
  Each CGI server
  implementation MUST define a mechanism
  to pass data about the request from
  the server to the script.
  The metavariables containing these
  data
  are accessed by the script in a system
  defined manner.
  The
  representation of the characters in the
  metavariables is
  system defined.
  </P>
  <P>
  This specification does not distinguish between the representation of
  null values and missing ones.  Whether null or missing values
  (such as a query component of "?" or "", respectively) are represented
  by undefined metavariables or by metavariables with values of "" is
  implementation-defined.
  </P>
  <P>
  Case is not significant in the
  metavariable
  names, in that there cannot be two
  different variables
  whose names differ in case only. Here they are
  shown using a canonical representation of capitals plus underscore
  ("_"). The actual representation of the names is system defined; for
  a particular system the representation MAY be defined differently
  than this.
  </P>
  <P>
  Metavariable
  values MUST be
  considered case-sensitive except as noted
  otherwise.
  </P>
  <P>
  The canonical
  metavariables
  defined by this specification are:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    AUTH_TYPE
    CONTENT_LENGTH
    CONTENT_TYPE
    GATEWAY_INTERFACE
    PATH_INFO
    PATH_TRANSLATED
    QUERY_STRING
    REMOTE_ADDR
    REMOTE_HOST
    REMOTE_IDENT
    REMOTE_USER
    REQUEST_METHOD
    SCRIPT_NAME
    SERVER_NAME
    SERVER_PORT
    SERVER_PROTOCOL
    SERVER_SOFTWARE
  </PRE>
  <P>
  Metavariables with names beginning with the protocol name (<EM>e.g.</EM>,
  "HTTP_ACCEPT") are also canonical in their description of request header
  fields.  The number and meaning of these fields may change independently
  of this specification.  (See also <A HREF="#6.1.5">section 6.1.5</A>.)
  </P>

  <H4>
   <A NAME="6.1.1">
    6.1.1. AUTH_TYPE
   </A>
  </H4>
  <P>
  This variable is specific to requests made
  <EM>via</EM> the
  "<CODE>http</CODE>"
  scheme.
  </P>
  <P>
  If the Script-URI
  required access authentication for external
  access, then the server
  MUST set
  the value of
  this variable
  from the '<SAMP>auth-scheme</SAMP>' token in
  the request's "<SAMP>Authorization</SAMP>" header
  field.
  Otherwise
  it is
  set to NULL.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    AUTH_TYPE   = "" | auth-scheme
    auth-scheme = "Basic" | "Digest" | token
  </PRE>
  <P>
  HTTP access authentication schemes are described in section 11 of the
  HTTP/1.1 specification [<A HREF="#[8]">8</A>]. The auth-scheme is
  not case-sensitive.
  </P>
  <P>
  Servers
  MUST
  provide this metavariable
  to scripts if the request
  header included an "<SAMP>Authorization</SAMP>" field
  that was authenticated.
  </P>

  <H4>
   <A NAME="6.1.2">
    6.1.2. CONTENT_LENGTH
   </A>
  </H4>
  <P>
  This
  metavariable
  is set to the
  size of the message-body
  entity attached to the request, if any, in decimal
  number of octets. If no data are attached, then this
  metavariable
  is either NULL or not
  defined. The syntax is
  the same as for
  the HTTP "<SAMP>Content-Length</SAMP>" header field (section 14.14, HTTP/1.1
  specification [<A HREF="#[8]">8</A>]).
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    CONTENT_LENGTH = "" | 1*digit
  </PRE>
  <P>
  Servers MUST provide this metavariable
  to scripts if the request
  was accompanied by a
  message-body entity.
  </P>

  <H4>
   <A NAME="6.1.3">
    6.1.3. CONTENT_TYPE
   </A>
  </H4>
  <P>
  If the request includes a
  message-body,
  CONTENT_TYPE is set
  to
  the Internet Media Type
  [<A HREF="#[9]">9</A>] of the attached
  entity if the type was provided <EM>via</EM>
  a "<SAMP>Content-type</SAMP>" field in the
  request header, or if the server can determine it in the absence
  of a supplied "<SAMP>Content-type</SAMP>" field. The syntax is the
  same as for the HTTP
  "<SAMP>Content-Type</SAMP>" header field.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    CONTENT_TYPE = "" | media-type
    media-type   = type "/" subtype *( ";" parameter)
    type         = token
    subtype      = token
    parameter    = attribute "=" value
    attribute    = token
    value        = token | quoted-string
  </PRE>
  <P>
  The type, subtype,
  and parameter attribute names are not
  case-sensitive. Parameter values MAY be case sensitive.
  Media types and their use in HTTP are described
  in section 3.7 of the
  HTTP/1.1 specification [<A HREF="#[8]">8</A>].
  </P>
  <P>
  Example:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    application/x-www-form-urlencoded
  </PRE>
  <P>
  There is no default value for this variable. If and only if it is
  unset, then the script MAY attempt to determine the media type from
  the data received. If the type remains unknown, then
  the script MAY choose to either assume a
  content-type of
  <SAMP>application/octet-stream</SAMP>
  or reject the request with  a 415 ("Unsupported Media Type")
  error.  See <A HREF="#7.2.1.3">section 7.2.1.3</A>
  for more information about returning error status values.
  </P>
  <P>
  Servers MUST provide this metavariable
  to scripts if
  a "<SAMP>Content-Type</SAMP>" field was present
  in the original request header.  If the server receives a request
  with an attached entity but no "<SAMP>Content-Type</SAMP>"
  header field, it MAY attempt to
  determine the correct datatype, or it MAY omit this
  metavariable when
  communicating the request information to the script.
  </P>

  <H4>
   <A NAME="6.1.4">
    6.1.4. GATEWAY_INTERFACE
   </A>
  </H4>
  <P>
  This
  metavariable
  is set to
  the dialect of CGI being used
  by the server to communicate with the script.
  Syntax:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    GATEWAY_INTERFACE = "CGI" "/" major "." minor
    major             = 1*digit
    minor             = 1*digit
  </PRE>
  <P>
  Note that the major and minor numbers are treated as separate
  integers and hence each may be
  more than a single
  digit. Thus CGI/2.4 is a lower version than CGI/2.13 which in turn
  is lower than CGI/12.3. Leading zeros in either
  the major or the minor number MUST be ignored by scripts and
  SHOULD NOT be generated by servers.
  </P>
  <P>
  This document defines the 1.1 version of the CGI interface
  ("CGI/1.1").
  </P>
  <P>
  Servers MUST provide this metavariable
  to scripts.
  </P>

  <H4>
   <A NAME="6.1.5">
    6.1.5. Protocol-Specific Metavariables
   </A>
  </H4>
  <P>
  These metavariables are specific to
  the protocol
  <EM>via</EM> which the request is made.
  Interpretation of these variables depends on the value of
  the
  SERVER_PROTOCOL
  metavariable
  (see
  <A HREF="#6.1.17">section 6.1.17</A>).
  </P>
  <P>
  Metavariables
  with names beginning with "HTTP_" contain
  values from the request header, if the
  scheme used was HTTP.
  Each
  HTTP header field name is converted to upper case, has all occurrences of
  "-" replaced with "_",
  and has "HTTP_" prepended to  form
  the metavariable name.
  Similar transformations are applied for other
  protocols.
  The header data MAY be presented as sent
  by the client, or MAY be rewritten in ways which do not change its
  semantics. If multiple header fields with the same field-name are received
  then  the server
  MUST  rewrite them as though they
  had been received as a single header field having the same
  semantics before being represented in a
  metavariable.
  Similarly, a header field that is received on more than one line
  MUST be merged into a single line. The server MUST, if necessary,
  change the representation of the data (for example, the character
  set) to be appropriate for a CGI
  metavariable.
  <!-- ###NOTE: See if 2068 describes this thoroughly, and
  point there if so. -->
  </P>
  <P>
  Servers are
  not required to create
  metavariables for all
  the request
  header fields that they
  receive. In particular,
  they MAY
  decline to make available any
  header fields carrying authentication information, such as
  "<SAMP>Authorization</SAMP>", or
  which are available to the script
  <EM>via</EM> other metavariables,
  such as "<SAMP>Content-Length</SAMP>" and "<SAMP>Content-Type</SAMP>".
  </P>

  <H4>
   <A NAME="6.1.6">
    6.1.6. PATH_INFO
   </A>
  </H4>
  <P>
  The PATH_INFO
  metavariable
  specifies
  a path to be interpreted by the CGI script. It identifies the
  resource or sub-resource to be returned
  by the CGI
  script, and it is derived from the portion
  of the URI path following the script name but preceding
  any query data.
  The syntax
  and semantics are similar to a decoded HTTP URL
  'path' token
  (defined in
  RFC 2396
  [<A HREF="#[4]">4</A>]), with the exception
  that a PATH_INFO of "/"
  represents a single void path segment.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    PATH_INFO = "" | ( "/" path )
    path      = segment *( "/" segment )
    segment   = *pchar
    pchar     = &lt;any CHAR except "/"&gt;
  </PRE>
  <P>
  The PATH_INFO string is the trailing part of the &lt;path&gt; component of
  the Script-URI
  (see <A HREF="#3.2">section 3.2</A>)
  that follows the SCRIPT_NAME
  portion of the path.
  </P>
  <P>
  Servers MAY impose their own restrictions and
  limitations on what values they will accept for PATH_INFO, and MAY
  reject or edit any values they
  consider objectionable before passing
  them to the script.
  </P>
  <P>
  Servers MUST make this URI component available
  to CGI scripts.  The PATH_INFO
  value is case-sensitive, and the
  server MUST preserve the case of the PATH_INFO element of the URI
  when making it available to scripts.
  </P>

  <H4>
   <A NAME="6.1.7">
    6.1.7. PATH_TRANSLATED
   </A>
  </H4>
  <P>
  PATH_TRANSLATED is derived by taking any path-info component of the
  request URI (see
  <A HREF="#6.1.6">section 6.1.6</A>), decoding it
  (see <A HREF="#3.1">section 3.1</A>), parsing it as a URI in its own
  right, and performing any virtual-to-physical
  translation appropriate to map it onto the
  server's document repository structure.
  If the request URI includes no path-info
  component, the PATH_TRANSLATED metavariable SHOULD NOT be defined.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    PATH_TRANSLATED = *CHAR
  </PRE>
  <P>
  For a request such as the following:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    http://somehost.com/cgi-bin/somescript/this%2eis%2epath%2einfo
  </PRE>
  <P>
  the PATH_INFO component would be decoded, and the result
  parsed as though it were a request for the following:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    http://somehost.com/this.is.the.path.info
  </PRE>
  <P>
  This would then be translated to a
  location in the server's document repository,
  perhaps a filesystem path something
  like this:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    /usr/local/www/htdocs/this.is.the.path.info
  </PRE>
  <P>
  The result of the translation is the value of PATH_TRANSLATED.
  </P>
  <P>
  The value of PATH_TRANSLATED may or may not map to a valid
  repository
  location.
  Servers MUST preserve the case of the path-info
  segment if and only if the underlying
  repository
  supports case-sensitive
  names.  If the
  repository
  is only case-aware, case-preserving, or case-blind
  with regard to
  document names,
  servers are not required to preserve the
  case of the original segment through the translation.
  </P>
  <P>
  The
  translation
  algorithm the server uses to derive PATH_TRANSLATED is
  implementation defined; CGI scripts which use this variable may
  suffer limited portability.
  </P>
  <P>
  Servers SHOULD provide this metavariable
  to scripts if and only if the request URI includes a
  path-info component.
  </P>

  <H4>
   <A NAME="6.1.8">
    6.1.8. QUERY_STRING
   </A>
  </H4>
  <P>
  A URL-encoded
  string; the &lt;query&gt; part of the
  Script-URI.
  (See
  <A HREF="#3.2">section 3.2</A>.)
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    QUERY_STRING = query-string
    query-string = *uric
  </PRE>
  <P>
  The URL syntax for a  query
  string is described in
  section 3 of
  RFC 2396
  [<A HREF="#[4]">4</A>].
  </P>
  <P>
  Servers MUST supply this value to scripts.
  The QUERY_STRING value is case-sensitive.
  If the Script-URI does not include a query component,
  the QUERY_STRING metavariable MUST be defined as an empty string ("").
  </P>

  <H4>
   <A NAME="6.1.9">
    6.1.9. REMOTE_ADDR
   </A>
  </H4>
  <P>
  The IP address of the client
  sending the request to the server. This
  is not necessarily that of the user
  agent
  (such as if the request came through a proxy).
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    REMOTE_ADDR  = hostnumber
    hostnumber   = ipv4-address | ipv6-address
  </PRE>
  <P>
  The definitions of <SAMP>ipv4-address</SAMP> and <SAMP>ipv6-address</SAMP>
  are provided in Appendix B of RFC 2373 [<A HREF="#[13]">13</A>].
  </P>
  <P>
  Servers MUST supply this value to scripts.
  </P>

  <H4>
   <A NAME="6.1.10">
    6.1.10. REMOTE_HOST
   </A>
  </H4>
  <P>
  The fully qualified domain name of the
  client sending the request to
  the server, if available, otherwise NULL.
  (See <A HREF="#6.1.9">section 6.1.9</A>.)
  Fully qualified domain names take the form as described in
  section 3.5 of RFC 1034 [<A HREF="#[10]">10</A>] and section 2.1 of
  RFC 1123 [<A HREF="#[5]">5</A>].  Domain names are not case sensitive.
  </P>
  <P>
  Servers SHOULD provide this information to
  scripts.
  </P>

  <H4>
   <A NAME="6.1.11">
    6.1.11. REMOTE_IDENT
   </A>
  </H4>
  <P>
  The identity information reported about the connection by a
  RFC 1413 [<A HREF="#[11]">11</A>] request to the remote agent, if
  available. Servers
  MAY choose not
  to support this feature, or not to request the data
  for efficiency reasons.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    REMOTE_IDENT = *CHAR
  </PRE>
  <P>
  The data returned
  may be used for authentication purposes, but the level
  of trust reposed in them should be minimal.
  </P>
  <P>
  Servers MAY supply this information to scripts if the
  RFC1413 [<A HREF="#[11]">11</A>] lookup is performed.
  </P>

  <H4>
   <A NAME="6.1.12">
    6.1.12. REMOTE_USER
   </A>
  </H4>
  <P>
  If the request required authentication using the "Basic"
  mechanism (<EM>i.e.</EM>, the AUTH_TYPE
  metavariable is set
  to "Basic"), then the value of the REMOTE_USER
  metavariable is set to the
  user-ID supplied.  In all other cases
  the value of this metavariable
  is undefined.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    REMOTE_USER = *OCTET
  </PRE>
  <P>
  This variable is specific to requests made <EM>via</EM> the
  HTTP protocol.
  </P>
  <P>
  Servers SHOULD provide this metavariable
  to scripts.
  </P>

  <H4>
   <A NAME="6.1.13">
    6.1.13. REQUEST_METHOD
   </A>
  </H4>
  <P>
  The REQUEST_METHOD
  metavariable
  is set to the
  method with which the request was made, as described in section
  5.1.1 of the HTTP/1.0 specification [<A HREF="#[3]">3</A>] and
  section 5.1.1 of the
  HTTP/1.1 specification [<A HREF="#[8]">8</A>].
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    REQUEST_METHOD   = http-method
    http-method      = "GET" | "HEAD" | "POST" | "PUT" | "DELETE"
                       | "OPTIONS" | "TRACE" | extension-method
    extension-method = token
  </PRE>
  <P>
  The method is case sensitive.
  CGI/1.1 servers MAY choose to process some methods
  directly rather than passing them to scripts.
  </P>
  <P>
  This variable is specific to requests made with HTTP.
  </P>
  <P>
  Servers MUST provide this metavariable
  to scripts.
  </P>

  <H4>
   <A NAME="6.1.14">
    6.1.14. SCRIPT_NAME
   </A>
  </H4>
  <P>
  The SCRIPT_NAME
  metavariable
  is
  set to a URL path that could identify the CGI script (rather than the
  script's
  output). The syntax and semantics are identical to a
  decoded HTTP URL 'path' token
  (see RFC 2396
  [<A HREF="#[4]">4</A>]).
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    SCRIPT_NAME = "" | ( "/" [ path ] )
  </PRE>
  <P>
  The SCRIPT_NAME string is some leading part of the &lt;path&gt; component
  of the Script-URI derived in some
  implementation defined manner.
  No PATH_INFO or QUERY_STRING segments
  (see sections <A HREF="#6.1.6">6.1.6</A> and
  <A HREF="#6.1.8">6.1.8</A>) are included
  in the SCRIPT_NAME value.
  </P>
  <P>
  Servers MUST provide this metavariable
  to scripts.
  </P>

  <H4>
   <A NAME="6.1.15">
    6.1.15. SERVER_NAME
   </A>
  </H4>
  <P>
  The SERVER_NAME
  metavariable
  is set to the
  name  of the
  server, as
  derived from the &lt;host&gt; part of the
  Script-URI
  (see <A HREF="#3.2">section 3.2</A>).
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    SERVER_NAME = hostname | hostnumber
  </PRE>
  <P>
  Servers MUST provide this metavariable
  to scripts.
  </P>

  <H4>
   <A NAME="6.1.16">
    6.1.16. SERVER_PORT
   </A>
  </H4>
  <P>
  The SERVER_PORT
  metavariable
  is set to the
  port on which the
  request was received, as used in the &lt;port&gt;
  part of the Script-URI.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    SERVER_PORT = 1*digit
  </PRE>
  <P>
  If the &lt;port&gt; portion of the script-URI is blank, the actual
  port number upon which the request was received MUST be supplied.
  </P>
  <P>
  Servers MUST provide this metavariable
  to scripts.
  </P>

  <H4>
   <A NAME="6.1.17">
    6.1.17. SERVER_PROTOCOL
   </A>
  </H4>
  <P>
  The SERVER_PROTOCOL
  metavariable
  is set to
  the
  name and revision of the information protocol with which
  the
  request
  arrived.  This is not necessarily the same as the protocol version used by
  the server in its response to the client.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    SERVER_PROTOCOL   = HTTP-Version | extension-version
                        | extension-token
    HTTP-Version      = "HTTP" "/" 1*digit "." 1*digit
    extension-version = protocol "/" 1*digit "." 1*digit
    protocol          = 1*( alpha | digit | "+" | "-" | "." )
    extension-token   = token
  </PRE>
  <P>
  'protocol' is a version of the &lt;scheme&gt; part of the
  Script-URI, but is
  not identical to it.  For example, the scheme of a request may be
  "<SAMP>https</SAMP>" while the protocol remains "<SAMP>http</SAMP>".
  The protocol is not case sensitive, but
  by convention, 'protocol' is in
  upper case.
  </P>
  <P>
  A well-known extension token value is "INCLUDED",
  which signals that the current document is being included as part of
  a composite document, rather than being the direct target of the
  client request.
  </P>
  <P>
  Servers MUST provide this metavariable
  to scripts.
  </P>

  <H4>
   <A NAME="6.1.18">
    6.1.18. SERVER_SOFTWARE
   </A>
  </H4>
  <P>
  The SERVER_SOFTWARE
  metavariable
  is set to the
  name and version of the information server software answering the
  request (and running the gateway).
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    SERVER_SOFTWARE = 1*product
    product         = token [ "/" product-version ]
    product-version = token
  </PRE>
  <P>
  Servers MUST provide this metavariable
  to scripts.
  </P>

  <H3>
   <A NAME="6.2">
    6.2. Request Message-Bodies
   </A>
  </H3>
  <P>
  As there may be a data entity attached to the request, there MUST be
  a system defined method for the script to read
  these data. Unless
  defined otherwise, this will be <EM>via</EM> the 'standard input' file
  descriptor.
  </P>
  <P>
  If the CONTENT_LENGTH value (see <A HREF="#6.1.2">section 6.1.2</A>)
  is non-NULL, the server MUST supply at least that many bytes to
  scripts on the standard input stream.
  Scripts are
  not obliged to read the data.
  Servers MAY signal an EOF condition after CONTENT_LENGTH bytes have been
  read, but are
  not obligated to do so.  Therefore, scripts
  MUST NOT
  attempt to read more than CONTENT_LENGTH bytes, even if more data
  are available.
  </P>
  <P>
  For non-parsed header (NPH) scripts (see
  <A HREF="#7.1">section 7.1</A>
  below),
  servers SHOULD
  attempt to ensure that the data
  supplied to the script are precisely
  as supplied by the client and unaltered by
  the server.
  </P>
  <P>
  <A HREF="#8.1.2">Section 8.1.2</A> describes the requirements of
  servers with regard to requests that include
  message-bodies.
  </P>

  <H2>
   <A NAME="7.0">
    7. Data Output from the CGI Script
   </A>
  </H2>
  <P>
  There MUST be a system defined method for the script to send data
  back to the server or client; a script MUST always return some data.
  Unless defined otherwise, this will be <EM>via</EM> the 'standard
  output' file descriptor.
  </P>
  <P>
  There are two forms of output that  scripts can supply to servers: non-parsed
  header (NPH) output, and parsed header output.
  Servers MUST support parsed header
  output and MAY support NPH output.  The method of
  distinguishing between the two
  types of output (or scripts) is implementation defined.
  </P>
  <P>
  Servers MAY implement a timeout period within which data must be
  received from scripts.  If a server implementation defines such
  a timeout and receives no data from a script within the timeout
  period, the server MAY terminate the script process and SHOULD
  abort the client request with
  either a
  '504 Gateway Timed Out' or a
  '500 Internal Server Error' response.
  </P>

  <H3>
   <A NAME="7.1">
    7.1. Non-Parsed Header Output
   </A>
  </H3>
  <P>
  Scripts using the NPH output form
  MUST return a complete HTTP response message, as described
  in Section 6 of the HTTP specifications
  [<A HREF="#[3]">3</A>,<A HREF="#[8]">8</A>].
   NPH scripts
  MUST use the SERVER_PROTOCOL variable to determine the appropriate format
  for a response.
  </P>
  <P>
  Servers
  SHOULD attempt to ensure that the script output is sent
  directly to the client, with minimal
  internal and no transport-visible
  buffering.
  </P>

  <H3>
   <A NAME="7.2">
    7.2. Parsed Header Output
   </A>
  </H3>
  <P>
  Scripts using the parsed header output form MUST supply
  a CGI response message to the server
  as follows:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    CGI-Response   = *optional-field CGI-Field *optional-field NL [ Message-Body ]
    optional-field = ( CGI-Field | HTTP-Field )
    CGI-Field      = Content-type
                   | Location
                   | Status
                   | extension-header
  </PRE>
  <P><!-- ##### If HTTP defines x-headers, remove ours except x-cgi- -->
  The response comprises a header and a body, separated by a blank line.
  The body may be NULL.
  The header fields are either CGI header fields to be interpreted by
  the server, or HTTP header fields
  to be included in the response returned
  to the client
  if the request method is HTTP. At least one
  CGI-Field MUST be
  supplied, but no CGI  field name may be used more than once
  in a response.
  If a body is supplied, then a "<SAMP>Content-type</SAMP>"
  header field MUST be
  supplied by the script,
  otherwise the script MUST send a "<SAMP>Location</SAMP>"
  or "<SAMP>Status</SAMP>" header field. If a
  <SAMP>Location</SAMP> CGI-Field
  is returned, then the script MUST NOT supply
  any HTTP-Fields.
  </P>
  <P>
  Each header field in a CGI-Response MUST be specified on a single line;
  CGI/1.1 does not support continuation lines.
  </P>

  <H4>
   <A NAME="7.2.1">
    7.2.1. CGI header fields
   </A>
  </H4>
  <P>
  The CGI header fields have the generic syntax:
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    generic-field  = field-name ":" [ field-value ] NL
    field-name     = token
    field-value    = *( field-content | LWSP )
    field-content  = *( token | tspecial | quoted-string )
  </PRE>
  <P>
  The field-name is not case sensitive; a NULL field value is
  equivalent to the header field not being sent.
  </P>

  <H4>
   <A NAME="7.2.1.1">
    7.2.1.1. Content-Type
   </A>
  </H4>
  <P>
  The Internet Media Type [<A HREF="#[9]">9</A>] of the entity
  body, which is to be sent unmodified to the client.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    Content-Type = "Content-Type" ":" media-type NL
  </PRE>
  <P>
  This is actually an HTTP-Field
  rather than a CGI-Field, but
  it is listed here because of its importance in the CGI dialogue as
  a member of the "one of these is required" set of header
  fields.
  </P>

  <H4>
   <A NAME="7.2.1.2">
    7.2.1.2. Location
   </A>
  </H4>
  <P>
  This is used to specify to the server that the script is returning a
  reference to a document rather than an actual document.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    Location         = "Location" ":"
                       ( fragment-URI | rel-URL-abs-path ) NL
    fragment-URI     = URI [ # fragmentid ]
    URI              = scheme ":" *qchar
    fragmentid       = *qchar
    rel-URL-abs-path = "/" [ hpath ] [ "?" query-string ]
    hpath            = fpsegment *( "/" psegment )
    fpsegment        = 1*hchar
    psegment         = *hchar
    hchar            = alpha | digit | safe | extra
                       | ":" | "@" | "& | "="
  </PRE>
  <P>
  The Location
  value is either an absolute URI with optional fragment,
  as defined in RFC 1630 [<A HREF="#[1]">1</A>], or an absolute path
  within the server's URI space (<EM>i.e.</EM>,
  omitting the scheme and network-related fields) and optional
  query-string. If an absolute URI is returned by the script,
  then the
  server MUST generate a
  '302 redirect' HTTP response
  message unless the script has supplied an
  explicit Status response header field.
  Scripts returning an absolute URI MAY choose to
  provide a message-body.  Servers MUST make any appropriate modifications
  to the script's output to ensure the response to the user-agent complies
  with the response protocol version.
  If the Location value is a path, then the server
  MUST generate
  the response that it would have produced in response to a request
  containing the URL
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    scheme "://" SERVER_NAME ":" SERVER_PORT rel-URL-abs-path
  </PRE>
  <P>
  Note: If the request was accompanied by a
  message-body
  (such as for a POST request), and the script
  redirects the request with a Location field, the
  message-body
  may not be
  available to the resource that is the target of the redirect.
  </P>

  <H4>
   <A NAME="7.2.1.3">
    7.2.1.3. Status
   </A>
  </H4>
  <P>
  The "<SAMP>Status</SAMP>" header field is used to indicate to the server what
  status code the server MUST use in the response message.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    Status        = "Status" ":" digit digit digit SP reason-phrase NL
    reason-phrase = *&lt;CHAR, excluding CTLs, NL&gt;
  </PRE>
  <P>
  The valid status codes are listed in section 6.1.1 of the HTTP/1.0
  specifications [<A HREF="#[3]">3</A>]. If the SERVER_PROTOCOL is
  "HTTP/1.1", then the status codes defined in the HTTP/1.1
  specification [<A HREF="#[8]">8</A>] may
  be used. If the script does not return a "<SAMP>Status</SAMP>" header
  field, then "200 OK" SHOULD be assumed by the server.
  </P>
  <P>
  If a script is being used to handle a particular error or condition
  encountered by the server, such as a '404 Not Found' error, the script
  SHOULD use the "<SAMP>Status</SAMP>" CGI header field to propagate the error
  condition back to the client.  <EM>E.g.</EM>, in the example mentioned it
  SHOULD include a "Status:&nbsp;404&nbsp;Not&nbsp;Found" in the
  header data returned to the server.
  </P>

  <H4>
   <A NAME="7.2.1.4">
    7.2.1.4. Extension header fields
   </A>
  </H4>
  <P>
  Scripts MAY include in their CGI response header additional fields
  not defined in this or the HTTP specification.
  These are called "extension" fields,
  and have the syntax of a <SAMP>generic-field</SAMP> as defined in
  <A HREF="#7.2.1">section 7.2.1</A>.  The name of an extension field
  MUST NOT conflict with a field name defined in this or any other
  specification; extension field names SHOULD begin with "X-CGI-"
  to ensure uniqueness.
  </P>

  <H4>
   <A NAME="7.2.2">
    7.2.2. HTTP header fields
   </A>
  </H4>
  <P>
  The script MAY return any other header fields defined by the
  specification
  for the SERVER_PROTOCOL (HTTP/1.0 [<A HREF="#[3]">3</A>] or HTTP/1.1
  [<A HREF="#[8]">8</A>]).
  Servers MUST resolve conflicts beteen CGI header
  and HTTP header formats or names (see <A HREF="#8.0">section 8</A>).
  </P>

  <H2>
   <A NAME="8.0">
    8. Server Implementation
   </A>
  </H2>
  <P>
  This section defines the requirements that must be met by HTTP
  servers in order to provide a coherent and correct CGI/1.1
  environment in which scripts may function.  It is intended
  primarily for server implementors, but it is useful for
  script authors to be familiar with the information as well.
  </P>

  <H3>
   <A NAME="8.1">
    8.1. Requirements for Servers
   </A>
  </H3>
  <P>
  In order to be considered CGI/1.1-compliant, a server must meet
  certain basic criteria and provide certain minimal functionality.
  The details of these requirements are described in the following sections.
  </P>

  <H3>
   <A NAME="8.1.1">
    8.1.1. Script-URI
   </A>
  </H3>
  <P>
  Servers MUST support the standard mechanism (described below) which
  allows
  script authors to determine
  what URL to use in documents
  which reference the script;
  specifically, what URL to use in order to
  achieve particular settings of the
  metavariables. This
  mechanism is as follows:
  </P>
  <P>
  The server
  MUST translate the header data from the CGI header field syntax to
  the HTTP
  header field syntax if these differ. For example, the character
  sequence for
  newline (such as Unix's ASCII NL) used by CGI scripts may not be the
  same as that used by HTTP (ASCII CR followed by LF). The server MUST
  also resolve any conflicts between header fields returned by the script
  and header fields that it would otherwise send itself.
  </P>

  <H3>
   <A NAME="8.1.2">
    8.1.2. Request Message-body Handling
   </A>
  </H3>
  <P>
  These are the requirements for server handling of message-bodies directed
  to CGI/1.1 resources:
  </P>
  <OL>
   <LI>The message-body the server provides to the CGI script MUST
    have any transfer encodings removed.
   </LI>
   <LI>The server MUST derive and provide a value for the CONTENT_LENGTH
    metavariable that reflects the length of the message-body after any
    transfer decoding.
   </LI>
   <LI>The server MUST leave intact any content-encodings of the message-body.
   </LI>
  </OL>

  <H3>
   <A NAME="8.1.3">
    8.1.3. Required Metavariables
   </A>
  </H3>
  <P>
  Servers MUST provide scripts with certain information and
  metavariables
  as described in <A HREF="#8.3">section 8.3</A>.
  </P>

  <H3>
   <A NAME="8.1.4">
    8.1.4. Response Compliance
   </A>
  </H3>
  <P>
  Servers MUST ensure that responses sent to the user-agent meet all
  requirements of the protocol level in effect.  This may involve
  modifying, deleting, or augmenting any header
  fields and/or message-body supplied by the script.
  </P>

  <H3>
   <A NAME="8.2">
    8.2. Recommendations for Servers
   </A>
  </H3>
  <P>
  Servers SHOULD provide the "<SAMP>query</SAMP>" component of the script-URI
  as command-line arguments to scripts if it does not
  contain any unencoded '=' characters and the command-line arguments can
  be generated in an unambiguous manner.
  (See <A HREF="#5.0">section 5</A>.)
  </P>
  <P>
  Servers SHOULD set the AUTH_TYPE
  metavariable to the value of the
  '<SAMP>auth-scheme</SAMP>' token of the "<SAMP>Authorization</SAMP>"
  field if it was supplied as part of the request header.
  (See <A HREF="#6.1.1">section 6.1.1</A>.)
  </P>
  <P>
  Where applicable, servers SHOULD set the current working directory
  to the directory in which the script is located before invoking
  it.
  </P>
  <P>
  Servers MAY reject with error '404 Not Found'
  any requests that would result in
  an encoded "/" being decoded into PATH_INFO or SCRIPT_NAME, as this
  might represent a loss of information to the script.
  </P>
  <P>
  Although the server and the CGI script need not be consistent in
  their handling of URL paths (client URLs and the PATH_INFO data,
  respectively), server authors may wish to impose consistency.
  So the server implementation SHOULD define its behaviour for the
  following cases:
  </P>
  <OL>
   <LI>define any restrictions on allowed characters, in particular
    whether ASCII NUL is permitted;
   </LI>
   <LI>define any restrictions on allowed path segments, in particular
    whether non-terminal NULL segments are permitted;
   </LI>
   <LI>define the behaviour for <SAMP>"."</SAMP> or <SAMP>".."</SAMP> path
    segments; <EM>i.e.</EM>, whether they are prohibited, treated as
    ordinary path
    segments or interpreted in accordance with the relative URL
    specification [<A HREF="#[7]">7</A>];
   </LI>
   <LI>define any limits of the implementation, including limits on path or
    search string lengths, and limits on the volume of header data the server
    will parse.
   </LI><!-- ##### Move the field resolution/translation para below here -->
  </OL>
  <P>
  Servers MAY generate the
  Script-URI in
  any way from the client URI,
  or from any other data (but the behaviour SHOULD be documented).
  </P>
  <P>
  For non-parsed header (NPH) scripts (see
  <A HREF="#7.1">section 7.1</A>), servers SHOULD
  attempt to ensure that the script input comes directly from the
  client, with minimal buffering. For all scripts the data will be
  as supplied by the client.
  </P>

  <H3>
   <A NAME="8.3">
    8.3. Summary of
    MetaVariables
   </A>
  </H3>
  <P>
  Servers MUST provide the following
  metavariables to
  scripts.  See the individual descriptions for exceptions and semantics.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    CONTENT_LENGTH (section <A HREF="#6.1.2">6.1.2</A>)
    CONTENT_TYPE (section <A HREF="#6.1.3">6.1.3</A>)
    GATEWAY_INTERFACE (section <A HREF="#6.1.4">6.1.4</A>)
    PATH_INFO (section <A HREF="#6.1.6">6.1.6</A>)
    QUERY_STRING (section <A HREF="#6.1.8">6.1.8</A>)
    REMOTE_ADDR (section <A HREF="#6.1.9">6.1.9</A>)
    REQUEST_METHOD (section <A HREF="#6.1.13">6.1.13</A>)
    SCRIPT_NAME (section <A HREF="#6.1.14">6.1.14</A>)
    SERVER_NAME (section <A HREF="#6.1.15">6.1.15</A>)
    SERVER_PORT (section <A HREF="#6.1.16">6.1.16</A>)
    SERVER_PROTOCOL (section <A HREF="#6.1.17">6.1.17</A>)
    SERVER_SOFTWARE (section <A HREF="#6.1.18">6.1.18</A>)
  </PRE>
  <P>
  Servers SHOULD define the following
  metavariables for scripts.
  See the individual descriptions for exceptions and semantics.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    AUTH_TYPE (section <A HREF="#6.1.1">6.1.1</A>)
    REMOTE_HOST (section <A HREF="#6.1.10">6.1.10</A>)
  </PRE>
  <P>
  In addition, servers SHOULD provide
  metavariables for all fields present
  in the HTTP request header, with the exception of those involved with
  access control.  Servers MAY at their discretion provide
  metavariables
  for access control fields.
  </P>
  <P>
  Servers MAY define the following
  metavariables.  See the individual
  descriptions for exceptions and semantics.
  </P><!--#if expr="! $GUI" -->
  <P></P><!--#endif -->
  <PRE>
    PATH_TRANSLATED (section <A HREF="#6.1.7">6.1.7</A>)
    REMOTE_IDENT (section <A HREF="#6.1.11">6.1.11</A>)
    REMOTE_USER (section <A HREF="#6.1.12">6.1.12</A>)
  </PRE>
  <P>
  Servers MAY
  at their discretion define additional implementation-specific
  extension metavariables
  provided their names do not
  conflict with defined header field names.  Implementation-specific
  metavariable names SHOULD
  be prefixed with "X_" (<EM>e.g.</EM>,
  "X_DBA") to avoid the potential for such conflicts.
  </P>

  <H2>
   <A NAME="9.0">
    9.
    Script Implementation
   </A>
  </H2>
  <P>
  This section defines the requirements and recommendations for scripts
  that are intended to function in a CGI/1.1 environment.  It is intended
  primarily as a reference for script authors, but server implementors
  should be familiar with these issues as well.
  </P>

  <H3>
   <A NAME="9.1">
    9.1. Requirements for Scripts
   </A>
  </H3>
  <P>
  Scripts using the parsed-header method to communicate with servers
  MUST supply a response header to the server.
  (See <A HREF="#7.0">section 7</A>.)
  </P>
  <P>
  Scripts using the NPH method to communicate with servers MUST
  provide complete HTTP responses, and MUST use the value of the
  SERVER_PROTOCOL metavariable
  to determine the appropriate format.
  (See <A HREF="#7.1">section 7.1</A>.)
  </P>
  <P>
  Scripts MUST check the value of the REQUEST_METHOD
  metavariable in order
  to provide an appropriate response.
  (See <A HREF="#6.1.13">section 6.1.13</A>.)
  </P>
  <P>
  Scripts MUST be prepared to handled URL-encoded values in
  metavariables.
  In addition, they MUST recognise both "+" and "%20" in URL-encoded
  quantities as representing the space character.
  (See <A HREF="#3.1">section 3.1</A>.)
  </P>
  <P>
  Scripts MUST ignore leading zeros in the major and minor version numbers
  in the GATEWAY_INTERFACE
  metavariable value. (See
  <A HREF="#6.1.4">section 6.1.4</A>.)
  </P>
  <P>
  When processing requests that include a
  message-body, scripts
  MUST NOT read more than CONTENT_LENGTH bytes from the input stream.
  (See sections <A HREF="#6.1.2">6.1.2</A> and <A HREF="#6.2">6.2</A>.)
  </P>

  <H3>
   <A NAME="9.2">
    9.2. Recommendations for Scripts
   </A>
  </H3>
  <P>
  Servers may interrupt or terminate script execution at any time
  and without warning, so scripts SHOULD be prepared to deal with
  abnormal termination.
  </P>
  <P>
  Scripts MUST
  reject with
  error '405 Method Not
  Allowed' requests
  made using methods that they do not support. If the script does
  not intend
  processing the PATH_INFO data, then it SHOULD reject the request with
  '404 Not
  Found' if PATH_INFO is not NULL.
  </P>
  <P>
  If a script is processing the output of a form, it SHOULD
  verify that the CONTENT_TYPE
  is "<SAMP>application/x-www-form-urlencoded</SAMP>" [<A HREF="#[2]">2</A>]
  or whatever other media type is expected.
  </P>
  <P>
  Scripts parsing PATH_INFO,
  PATH_TRANSLATED, or SCRIPT_NAME
  SHOULD be careful
  of void path segments ("<SAMP>//</SAMP>") and special path segments
  (<SAMP>"."</SAMP> and
  <SAMP>".."</SAMP>). They SHOULD either be removed from the path before
  use in OS
  system calls, or the request SHOULD be rejected with
  '404 Not Found'.
  </P>
  <P>
  As it is impossible for
  scripts to determine the client URI that
  initiated  a
  request without knowledge of the specific server in
  use, the script SHOULD NOT return "<SAMP>text/html</SAMP>"
  documents containing
  relative URL links without including a "<SAMP>&lt;BASE&gt;</SAMP>"
  tag in the document.
  </P>
  <P>
  When returning header fields,
  scripts SHOULD try to send the CGI
  header fields (see section
  <A HREF="#7.2">7.2</A>) as soon as possible, and
  SHOULD send them
  before any HTTP header fields. This may
  help reduce the server's memory requirements.
  </P>

  <H2>
   <A NAME="10.0">
    10. System Specifications
   </A>
  </H2>

  <H3>
   <A NAME="10.1">
    10.1. AmigaDOS
   </A>
  </H3>
  <P>
  The implementation of the CGI on an AmigaDOS operating system platform
  SHOULD use environment variables as the mechanism of providing
  request metadata to CGI scripts.
  </P>
  <DL>
   <DT><STRONG>Environment variables</STRONG>
   </DT>
   <DD>
    <P>
    These are accessed by the DOS library routine <SAMP>GetVar</SAMP>. The
    flags argument SHOULD be 0. Case is ignored, but upper case is
    recommended for compatibility with case-sensitive systems.
    </P>
   </DD>
   <DT><STRONG>The current working directory</STRONG>
   </DT>
   <DD>
    <P>
    The current working directory for the script is set to the directory
    containing the script.
    </P>
   </DD>
   <DT><STRONG>Character set</STRONG>
   </DT>
   <DD>
    <P>
    The US-ASCII character set is used for the definition of environment
    variable names and header
    field names; the newline (NL) sequence is LF;
    servers SHOULD also accept CR LF as a newline.
    </P>
   </DD>
  </DL>

  <H3>
   <A NAME="10.2">
    10.2. Unix
   </A>
  </H3>
  <P>
  The implementation of the CGI on a UNIX operating system platform
  SHOULD use environment variables as the mechanism of providing
  request metadata to CGI scripts.
  </P>
  <P>
  For Unix compatible operating systems, the following are defined:
  </P>
  <DL>
   <DT><STRONG>Environment variables</STRONG>
   </DT>
   <DD>
    <P>
    These are accessed by the C library routine <SAMP>getenv</SAMP>.
    </P>
   </DD>
   <DT><STRONG>The command line</STRONG>
   </DT>
   <DD>
    <P>
    This is accessed using the
    <SAMP>argc</SAMP> and <SAMP>argv</SAMP>
    arguments to <SAMP>main()</SAMP>. The words have any characters
    that
    are 'active' in the Bourne shell escaped with a backslash.
    If the value of the QUERY_STRING
    metavariable
    contains an unencoded equals-sign '=', then the command line
    SHOULD NOT be used by the script.
    </P>
   </DD>
   <DT><STRONG>The current working directory</STRONG>
   </DT>
   <DD>
    <P>
    The current working directory for the script
    SHOULD be set to the directory
    containing the script.
    </P>
   </DD>
   <DT><STRONG>Character set</STRONG>
   </DT>
   <DD>
    <P>
    The US-ASCII character set is used for the definition of environment
    variable names and header field names; the newline (NL) sequence is LF;
    servers SHOULD also accept CR LF as a newline.
    </P>
   </DD>
  </DL>

  <H2>
   <A NAME="11.0">
    11. Security Considerations
   </A>
  </H2>

  <H3>
   <A NAME="11.1">
    11.1. Safe Methods
   </A>
  </H3>
  <P>
  As discussed in the security considerations of the HTTP
  specifications [<A HREF="#[3]">3</A>,<A HREF="#[8]">8</A>], the
  convention has been established that the
  GET and HEAD methods should be 'safe'; they should cause no
  side-effects and only have the significance of resource retrieval.
  </P>
  <P>
  CGI scripts are responsible for enforcing any HTTP security considerations
  [<A HREF="#[3]">3</A>,<A HREF="#[8]">8</A>]
  with respect to the protocol version level of the request and
  any side effects generated by the scripts on behalf of
  the server.  Primary
  among these
  are the considerations of safe and idempotent methods.  Idempotent
  requests are those that may be repeated an arbitrary number of times
  and produce side effects identical to a single request.
  </P>

  <H3>
   <A NAME="11.2">
    11.2. HTTP Header
    Fields Containing Sensitive Information
   </A>
  </H3>
  <P>
  Some HTTP header fields may carry sensitive information which the server
  SHOULD NOT pass on to the script unless explicitly configured to do
  so. For example, if the server protects the script using the
  "<SAMP>Basic</SAMP>"
  authentication scheme, then the client will send an
  "<SAMP>Authorization</SAMP>"
  header field containing a username and password. If the server, rather
  than the script, validates this information then the password SHOULD
  NOT be passed on to the script <EM>via</EM> the HTTP_AUTHORIZATION
  metavariable
  without careful consideration.
  This also applies to the
  Proxy-Authorization header field and the corresponding
  HTTP_PROXY_AUTHORIZATION
  metavariable.
  </P>

  <H3>
   <A NAME="11.3">
    11.3. Script
    Interference with the Server
   </A>
  </H3>
  <P>
  The most common implementation of CGI invokes the script as a child
  process using the same user and group as the server process. It
  SHOULD therefore be ensured that the script cannot interfere with the
  server process, its configuration, or documents.
  </P>
  <P>
  If the script is executed by calling a function linked in to the
  server software (either at compile-time or run-time) then precautions
  SHOULD be taken to protect the core memory of the server, or to
  ensure that untrusted code cannot be executed.
  </P>

  <H3>
   <A NAME="11.4">
    11.4. Data Length and Buffering Considerations
   </A>
  </H3>
  <P>
  This specification places no limits on the length of message-bodies
  presented to the script.  Scripts should not assume that statically
  allocated buffers of any size are sufficient to contain the entire
  submission at one time.  Use of a fixed length buffer without careful
  overflow checking may result in an attacker exploiting 'stack-smashing'
  or 'stack-overflow' vulnerabilities of the operating system.
  Scripts may spool large submissions to disk or other buffering media,
  but a rapid succession of large submissions may result in denial of
  service conditions.  If the CONTENT_LENGTH of a message-body is larger
  than resource considerations allow, scripts should respond with an
  error status appropriate for the protocol version; potentially applicable
  status codes include '503 Service Unavailable' (HTTP/1.0 and HTTP/1.1),
  '413 Request Entity Too Large' (HTTP/1.1), and
  '414 Request-URI Too Long' (HTTP/1.1).
  </P>

  <H3>
   <A NAME="11.5">
    11.5. Stateless Processing
   </A>
  </H3>
  <P>
  The stateless nature of the Web makes each script execution and resource
  retrieval independent of all others even when multiple requests constitute a
  single conceptual Web transaction.  Because of this, a script should not
  make any assumptions about the context of the user-agent submitting a
  request.  In particular, scripts should examine data obtained from the client
  and verify that they are valid, both in form and content, before allowing
  them to be used for sensitive purposes such as input to other
  applications, commands, or operating system services.  These uses
  include, but are not
  limited to: system call arguments, database writes, dynamically evaluated
  source code, and input to billing or other secure processes.  It is important
  that applications be protected from invalid input regardless of whether
  the invalidity is the result of user error, logic error, or malicious action.
  </P>
  <P>
  Authors of scripts involved in multi-request transactions should be
  particularly cautios about validating the state information;
  undesirable effects may result from the substitution of dangerous
  values for portions of the submission which might otherwise be
  presumed safe.  Subversion of this type occurs when alterations
  are made to data from a prior stage of the transaction that were
  not meant to be controlled by the client (<EM>e.g.</EM>, hidden
  HTML form elements, cookies, embedded URLs, <EM>etc.</EM>).
  </P>

  <H2>
   <A NAME="12.0">
    12. Acknowledgements
   </A>
  </H2>
  <P>
  This work is based on a draft published in 1997 by David R. Robinson,
  which in turn was based on the original CGI interface that arose out of
  discussions on the <EM>www-talk</EM> mailing list. In particular,
  Rob McCool, John Franks, Ari Luotonen,
  George Phillips and
  Tony Sanders deserve special recognition for their efforts in
  defining and implementing the early versions of this interface.
  </P>
  <P>
  This document has also greatly benefited from the comments and
  suggestions made by  Chris Adie, Dave Kristol,
  Mike Meyer, David Morris, Jeremy Madea,
  Patrick M<SUP>c</SUP>Manus, Adam Donahue,
  Ross Patterson, and Harald Alvestrand.
  </P>

  <H2>
   <A NAME="13.0">
    13. References
   </A>
  </H2>
  <DL COMPACT>
   <DT><A NAME="[1]">[1]</A>
   </DT>
   <DD>Berners-Lee, T., 'Universal Resource Identifiers in WWW: A
       Unifying Syntax for the Expression of Names and Addresses of
       Objects on the Network as used in the World-Wide Web', RFC 1630,
       CERN, June 1994.
       <P>
       </P>
   </DD>
   <DT><A NAME="[2]">[2]</A>
   </DT>
   <DD>Berners-Lee, T. and Connolly, D., 'Hypertext Markup Language -
        2.0', RFC 1866, MIT/W3C, November 1995.
       <P>
       </P>
   </DD>
   <DT><A NAME="[3]">[3]</A>
   </DT>
   <DD>Berners-Lee, T., Fielding, R. T. and Frystyk, H.,
          'Hypertext Transfer Protocol -- HTTP/1.0', RFC 1945, MIT/LCS,
          UC Irvine, May 1996.
       <P>
       </P>
   </DD>

  <DT><A NAME="[4]">[4]</A>
  </DT>
  <DD>Berners-Lee, T., Fielding, R., and Masinter, L., Editors,
   'Uniform Resource Identifiers (URI): Generic Syntax', RFC 2396,
   MIT, U.C. Irvine, Xerox Corporation, August 1996.
   <P>
   </P>
  </DD>

  <DT><A NAME="[5]">[5]</A>
  </DT>
  <DD>Braden, R., Editor, 'Requirements for Internet Hosts --
          Application and Support', STD 3, RFC 1123, IETF, October 1989.
       <P>
       </P>
   </DD>
   <DT><A NAME="[6]">[6]</A>
   </DT>
   <DD>Crocker, D.H., 'Standard for the Format of ARPA Internet Text
          Messages', STD 11, RFC 822, University of Delaware, August 1982.
       <P>
       </P>
   </DD>
  <DT><A NAME="[7]">[7]</A>
  </DT>
  <DD>Fielding, R., 'Relative Uniform Resource Locators', RFC 1808,
          UC Irvine, June 1995.
       <P>
       </P>
   </DD>
   <DT><A NAME="[8]">[8]</A>
   </DT>
   <DD>Fielding, R., Gettys, J., Mogul, J., Frystyk, H. and
          Berners-Lee, T., 'Hypertext Transfer Protocol -- HTTP/1.1',
          RFC 2068, UC Irvine, DEC,
	  MIT/LCS, January 1997.
       <P>
       </P>
   </DD>
   <DT><A NAME="[9]">[9]</A>
   </DT>
   <DD>Freed, N. and Borenstein N., 'Multipurpose Internet Mail
          Extensions (MIME) Part Two: Media Types', RFC 2046, Innosoft,
          First Virtual, November 1996.
       <P>
       </P>
   </DD>
   <DT><A NAME="[10]">[10]</A>
   </DT>
   <DD>Mockapetris, P., 'Domain Names - Concepts and Facilities',
          STD 13, RFC 1034, ISI, November 1987.
       <P>
       </P>
   </DD>
   <DT><A NAME="[11]">[11]</A>
   </DT>
   <DD>St. Johns, M., 'Identification Protocol', RFC 1431, US
          Department of Defense, February 1993.
       <P>
       </P>
   </DD>
   <DT><A NAME="[12]">[12]</A>
   </DT>
   <DD>'Coded Character Set -- 7-bit American Standard Code for
          Information Interchange', ANSI X3.4-1986.
       <P>
       </P>
   </DD>
   <DT><A NAME="[13]">[13]</A>
   </DT>
   <DD>Hinden, R. and Deering, S.,
          'IP Version 6 Addressing Architecture', RFC 2373,
	  Nokia, Cisco Systems,
          July 1998.
       <P>
       </P>
   </DD>
  </DL>

  <H2>
   <A NAME="14.0">
    14. Authors' Addresses
   </A>
  </H2>
  <ADDRESS>
   <P>
   Ken A L Coar
   <BR>
   MeepZor Consulting
   <BR>
   7824 Mayfaire Crest Lane, Suite 202
   <BR>
   Raleigh, NC   27615-4875
   <BR>
   U.S.A.
   </P>
   <P>
   Tel: +1 (919) 254.4237
   <BR>
   Fax: +1 (919) 254.5250
   <BR>
   Email:
   <A
    HREF="mailto:Ken.Coar@Golux.Com"
   ><SAMP>Ken.Coar@Golux.Com</SAMP></A>
   </P>
  </ADDRESS>
  <ADDRESS>
   <P>
   David Robinson
   <BR>
   E*TRADE UK Ltd
   <BR>
   Mount Pleasant House
   <BR>
   2 Mount Pleasant
   <BR>
   Huntingdon Road
   <BR>
   Cambridge CB3 0RN
   <BR>
   UK
   </P>
   <P>
   Tel: +44 (1223) 566926
   <BR>
   Fax: +44 (1223) 506288
   <BR>
   Email:
   <A
    HREF="mailto:drtr@etrade.co.uk"
   ><SAMP>drtr@etrade.co.uk</SAMP></A>
  </ADDRESS>

 </BODY>
</HTML>
