   CGI Environment Variables

---------------------------------------------------------------------------

In order to pass data about the information request from the server to the
script, the server uses command line arguments as well as environment
variables. These environment variables are set when the server executes the
gateway program.

---------------------------------------------------------------------------

Specification

The following environment variables are not request-specific and are set
for all requests:

   * SERVER_SOFTWARE

     The name and version of the information server software answering the
     request (and running the gateway). Format: name/version

   * SERVER_NAME

     The server's hostname, DNS alias, or IP address as it would appear in
     self-referencing URLs.

   * GATEWAY_INTERFACE

     The revision of the CGI specification to which this server complies.
     Format: CGI/revision

---------------------------------------------------------------------------
The following environment variables are specific to the request being
fulfilled by the gateway program:

   * SERVER_PROTOCOL

     The name and revision of the information protcol this request came in
     with. Format: protocol/revision

   * SERVER_PORT

     The port number to which the request was sent.

   * REQUEST_METHOD

     The method with which the request was made. For HTTP, this is "GET",
     "HEAD", "POST", etc.

   * PATH_INFO

     The extra path information, as given by the client. In other words,
     scripts can be accessed by their virtual pathname, followed by extra
     information at the end of this path. The extra information is sent as
     PATH_INFO. This information should be decoded by the server if it
     comes from a URL before it is passed to the CGI script.

   * PATH_TRANSLATED

     The server provides a translated version of PATH_INFO, which takes the
     path and does any virtual-to-physical mapping to it.

   * SCRIPT_NAME

     A virtual path to the script being executed, used for self-referencing
     URLs.

   * QUERY_STRING

     The information which follows the ? in the URL which referenced this
     script. This is the query information. It should not be decoded in any
     fashion. This variable should always be set when there is query
     information, regardless of command line decoding.

   * REMOTE_HOST

     The hostname making the request. If the server does not have this
     information, it should set REMOTE_ADDR and leave this unset.

   * REMOTE_ADDR

     The IP address of the remote host making the request.

   * AUTH_TYPE

     If the server supports user authentication, and the script is
     protects, this is the protocol-specific authentication method used to
     validate the user.

   * REMOTE_USER

     If the server supports user authentication, and the script is
     protected, this is the username they have authenticated as.

   * REMOTE_IDENT

     If the HTTP server supports RFC 931 identification, then this variable
     will be set to the remote user name retrieved from the server. Usage
     of this variable should be limited to logging only.

   * CONTENT_TYPE

     For queries which have attached information, such as HTTP POST and
     PUT, this is the content type of the data.

   * CONTENT_LENGTH

     The length of the said content as given by the client.

---------------------------------------------------------------------------
In addition to these, the header lines received from the client, if any,
are placed into the environment with the prefix HTTP_ followed by the
header name. Any - characters in the header name are changed to _
characters. The server may exclude any headers which it has already
processed, such as Authorization, Content-type, and Content-length. If
necessary, the server may choose to exclude any or all of these headers if
including them would exceed any system environment limits.

An example of this is the HTTP_ACCEPT variable which was defined in
CGI/1.0. Another example is the header User-Agent.

   * HTTP_ACCEPT

     The MIME types which the client will accept, as given by HTTP headers.
     Other protocols may need to get this information from elsewhere. Each
     item in this list should be separated by commas as per the HTTP spec.

     Format: type/subtype, type/subtype

   * HTTP_USER_AGENT

     The browser the client is using to send the request. General format:
     software/version library/version.

---------------------------------------------------------------------------

Examples

Examples of the setting of environment variables are really much better
demonstrated than explained.

---------------------------------------------------------------------------
 [Back]  Return to the interface specification

CGI - Common Gateway Interface
cgi@ncsa.uiuc.edu
