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.
Parsed headers
The output of scripts begins with a small header. This header consists
of text lines, in the same format as an
HTTP header, terminated by a blank line (a line with only a
linefeed or CR/LF).
Any headers which are not server directives are sent directly back to the client. Currently, this specification defines three server directives:
Content-type
This is the MIME type of the document you are returning.
Location
This is used to specify to the server that you are returning a reference to a document rather than an actual document.
If the argument to this is a URL, the server will issue a redirect to the client.
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.
Status
This is used to give the server an HTTP/1.0 status
line to send to the client. The format is nnn xxxxx
,
where nnn
is the 3-digit status code, and
xxxxx
is the reason string, such as "Forbidden".
--- start of output --- Content-type: text/html --- end of output ---Note the blank line after Content-type.
Now, let's say I have a script which, in certain instances, wants to
return the document /path/doc.txt
from this server just
as if the user had actually requested
http://server:port/path/doc.txt
to begin with. In this
case, the script would output:
--- start of output --- Location: /path/doc.txt --- end of output ---The server would then perform the request and send it to the client.
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
gopher://gopher.ncsa.uiuc.edu/
, it would output:
--- start of output --- Location: gopher://gopher.ncsa.uiuc.edu/ --- end of output ---Finally, I have a script which wants to talk to the client directly. In this case, if the script is referenced with
SERVER_PROTOCOL
of HTTP/1.0,
the script would output the following HTTP/1.0 response:
--- 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 ---
CGI - Common Gateway Interface
cgi@ncsa.uiuc.edu