<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 protcol 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>