<html><head><title>CGI Environment Variables</title></head><body><h1><img alt="" src="env_files/CGIlogo.gif"> CGI Environment Variables</h1>
<hr>

<p>

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. </p><p>

</p><hr>
<h2>Specification</h2>

 <p>
The following environment variables are not request-specific and are
set for all requests: </p><p>

</p><ul>
<li> <code>SERVER_SOFTWARE</code> <p>

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

</p></li><li> <code>SERVER_NAME</code> <p>
    The server's hostname, DNS alias, or IP address as it would appear
    in self-referencing URLs. </p><p>

</p></li><li> <code>GATEWAY_INTERFACE</code> <p>
    The revision of the CGI specification to which this server
    complies. Format: CGI/revision</p><p>

</p></li></ul>

<hr>

The following environment variables are specific to the request being
fulfilled by the gateway program: <p>

</p><ul>
<li> <a name="protocol"><code>SERVER_PROTOCOL</code></a> <p>
    The name and revision of the information protocol this request came
    in with. Format: protocol/revision </p><p>

</p></li><li> <code>SERVER_PORT</code>  <p>
    The port number to which the request was sent. </p><p>

</p></li><li> <code>REQUEST_METHOD</code> <p>
    The method with which the request was made. For HTTP, this is
    "GET", "HEAD", "POST", etc. </p><p>

</p></li><li> <code>PATH_INFO</code> <p>
    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.</p><p>

</p></li><li> <code>PATH_TRANSLATED</code> <p>
    The server provides a translated version of PATH_INFO, which takes
    the path and does any virtual-to-physical mapping to it. </p><p>

</p></li><li> <code>SCRIPT_NAME</code> <p>
    A virtual path to the script being executed, used for
    self-referencing URLs. </p><p>

</p></li><li> <a name="query"><code>QUERY_STRING</code></a> <p>
    The information which follows the ? in the <a href="http://www.ncsa.uiuc.edu/demoweb/url-primer.html">URL</a>
    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 <a href="http://hoohoo.ncsa.uiuc.edu/cgi/cl.html">command line decoding</a>. </p><p>

</p></li><li> <code>REMOTE_HOST</code> <p>
    The hostname making the request. If the server does not have this
    information, it should set REMOTE_ADDR and leave this unset.</p><p>

</p></li><li> <code>REMOTE_ADDR</code> <p>
    The IP address of the remote host making the request. </p><p>

</p></li><li> <code>AUTH_TYPE</code> <p>
    If the server supports user authentication, and the script is
    protects, this is the protocol-specific authentication method used
    to validate the user. </p><p>

</p></li><li> <code>REMOTE_USER</code> <p>
    If the server supports user authentication, and the script is
    protected, this is the username they have authenticated as. </p><p>
</p></li><li> <code>REMOTE_IDENT</code> <p>
    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.
    </p><p>

</p></li><li> <a name="ct"><code>CONTENT_TYPE</code></a> <p>
    For queries which have attached information, such as HTTP POST and
    PUT, this is the content type of the data. </p><p>

</p></li><li> <a name="cl"><code>CONTENT_LENGTH</code></a> <p>
    The length of the said content as given by the client. </p><p>

</p></li></ul>


<a name="headers"><hr></a>

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. <p>

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

</p><ul>
<li> <code>HTTP_ACCEPT</code> <p>
    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. </p><p>

    Format: type/subtype, type/subtype </p><p>


</p></li><li> <code>HTTP_USER_AGENT</code><p>

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

</p></li></ul>

<hr>
<h2>Examples</h2>

Examples of the setting of environment variables are really much better
<a href="http://hoohoo.ncsa.uiuc.edu/cgi/examples.html">demonstrated</a> than explained. <p>

</p><hr>

<a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html"><img alt="[Back]" src="env_files/back.gif">Return to the
interface specification</a> <p>

CGI - Common Gateway Interface
</p><address><a href="http://hoohoo.ncsa.uiuc.edu/cgi/mailtocgi.html">cgi@ncsa.uiuc.edu</a></address>

</body></html>
