126 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<html><head><title>CGI Script output</title></head><body><h1><img alt="" src="out_files/CGIlogo.gif"> CGI Script Output</h1>
 | 
						|
<hr>
 | 
						|
 | 
						|
<h2>Script output</h2>
 | 
						|
 | 
						|
The script sends its output to stdout. This output can either be a
 | 
						|
document generated by the script, or instructions to the server for
 | 
						|
retrieving the desired output. <p>
 | 
						|
</p><hr>
 | 
						|
 | 
						|
<h2>Script naming conventions</h2>
 | 
						|
 | 
						|
Normally, scripts produce output which is interpreted and sent back to
 | 
						|
the client. An advantage of this is that the scripts do not need to
 | 
						|
send a full HTTP/1.0 header for every request.  <p>
 | 
						|
<a name="nph">
 | 
						|
Some scripts may want to avoid the extra overhead of the server
 | 
						|
parsing their output, and talk directly to the client. In order to
 | 
						|
distinguish these scripts from the other scripts, CGI requires that
 | 
						|
the script name begins with nph- if a script does not want the server
 | 
						|
to parse its header. In this case, it is the script's responsibility
 | 
						|
to return a valid HTTP/1.0 (or HTTP/0.9) response to the client.  </a></p><p>
 | 
						|
 | 
						|
</p><hr>
 | 
						|
<h2><a name="nph">Parsed headers</a></h2>
 | 
						|
 | 
						|
<a name="nph">The output of scripts begins with a small header. This header consists
 | 
						|
of text lines, in the same format as an </a><a href="http://www.w3.org/hypertext/WWW/Protocols/HTTP/Object_Headers.html">
 | 
						|
HTTP header</a>, terminated by a blank line (a line with only a
 | 
						|
linefeed or CR/LF). <p>
 | 
						|
 | 
						|
Any headers which are not server directives are sent directly back to
 | 
						|
the client. Currently, this specification defines three server
 | 
						|
directives:</p><p>
 | 
						|
 | 
						|
</p><ul>
 | 
						|
<li> <code>Content-type</code> <p>
 | 
						|
 | 
						|
    This is the MIME type of the document you are returning.  </p><p>
 | 
						|
 | 
						|
</p></li><li> <code>Location</code> <p>
 | 
						|
 | 
						|
    This is used to specify to the server that you are returning a
 | 
						|
    reference to a document rather than an actual document. </p><p>
 | 
						|
 | 
						|
    If the argument to this is a URL, the server will issue a redirect
 | 
						|
    to the client. </p><p>
 | 
						|
 | 
						|
    If the argument to this is a virtual path, the server will
 | 
						|
    retrieve the document specified as if the client had requested
 | 
						|
    that document originally. ? directives will work in here, but #
 | 
						|
    directives must be redirected back to the client.</p><p>
 | 
						|
 | 
						|
 | 
						|
</p></li><li> <a name="status"><code>Status</code></a><p>
 | 
						|
 | 
						|
    This is used to give the server an HTTP/1.0 <a href="http://www.w3.org/hypertext/WWW/Protocols/HTTP/HTRESP.html">status
 | 
						|
line</a> to send to the client. The format is <code>nnn xxxxx</code>,
 | 
						|
where <code>nnn</code> is the 3-digit status code, and
 | 
						|
<code>xxxxx</code> is the reason string, such as "Forbidden".</p><p>
 | 
						|
 | 
						|
</p></li></ul>
 | 
						|
 | 
						|
<hr>
 | 
						|
<h2>Examples</h2>
 | 
						|
 | 
						|
Let's say I have a fromgratz to HTML converter. When my converter is
 | 
						|
finished with its work, it will output the following on stdout (note
 | 
						|
that the lines beginning and ending with --- are just for illustration
 | 
						|
and would not be output): <p>
 | 
						|
 | 
						|
</p><pre>--- start of output ---
 | 
						|
Content-type: text/html
 | 
						|
 | 
						|
--- end of output ---
 | 
						|
</pre>
 | 
						|
 | 
						|
Note the blank line after Content-type. <p>
 | 
						|
 | 
						|
Now, let's say I have a script which, in certain instances, wants to
 | 
						|
return the document <code>/path/doc.txt</code> from this server just
 | 
						|
as if the user had actually requested
 | 
						|
<code>http://server:port/path/doc.txt</code> to begin with. In this
 | 
						|
case, the script would output: </p><p>
 | 
						|
</p><pre>--- start of output ---
 | 
						|
Location: /path/doc.txt
 | 
						|
 | 
						|
--- end of output ---
 | 
						|
</pre>
 | 
						|
 | 
						|
The server would then perform the request and send it to the client.
 | 
						|
<p>
 | 
						|
 | 
						|
Let's say that I have a script which wants to reference our gopher
 | 
						|
server. In this case, if the script wanted to refer the user to
 | 
						|
<code>gopher://gopher.ncsa.uiuc.edu/</code>, it would output: </p><p>
 | 
						|
 | 
						|
</p><pre>--- start of output ---
 | 
						|
Location: gopher://gopher.ncsa.uiuc.edu/
 | 
						|
 | 
						|
--- end of output ---
 | 
						|
</pre>
 | 
						|
 | 
						|
Finally, I have a script which wants to talk to the client directly.
 | 
						|
In this case, if the script is referenced with <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html#protocol"><code>SERVER_PROTOCOL</code></a> of HTTP/1.0,
 | 
						|
the script would output the following HTTP/1.0 response: <p>
 | 
						|
 | 
						|
</p><pre>--- start of output ---
 | 
						|
HTTP/1.0 200 OK
 | 
						|
Server: NCSA/1.0a6
 | 
						|
Content-type: text/plain
 | 
						|
 | 
						|
This is a plaintext document generated on the fly just for you.
 | 
						|
 | 
						|
--- end of output ---
 | 
						|
</pre>
 | 
						|
 | 
						|
 | 
						|
<hr>
 | 
						|
 | 
						|
<a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html"><img alt="[Back]" src="out_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> |