Initial public busybox upstream commit
[busybox4maemo] / docs / draft-coar-cgi-v11-03-clean.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
2  "http://www.w3.org/TR/REC-html40/loose.dtd">
3 <HTML>
4  <HEAD>
5   <TITLE>Common Gateway Interface - 1.1 *Draft 03* [http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html]
6   </TITLE>
7 <!--#if expr="$HTTP_USER_AGENT != /Lynx/" -->
8  <!--#set var="GUI" value="1" -->
9 <!--#endif -->
10   <LINK HREF="mailto:Ken.Coar@Golux.Com" rev="revised">
11   <LINK REL="STYLESHEET" HREF="cgip-style-rfc.css" TYPE="text/css">
12   <META name="latexstyle" content="rfc">
13   <META name="author" content="Ken A L Coar">
14   <META name="institute" content="IBM Corporation">
15   <META name="date" content="25 June 1999">
16   <META name="expires" content="Expires 31 December 1999">
17   <META name="document" content="INTERNET-DRAFT">
18   <META name="file" content="&lt;draft-coar-cgi-v11-03.txt&gt;">
19   <META name="group" content="INTERNET-DRAFT">
20 <!--
21     There are a lot of BNF fragments in this document.  To make it work
22     in all possible browsers (including Lynx, which is used to turn it
23     into text/plain), we handle these by using PREformatted blocks with
24     a universal internal margin of 2, inside one-level DL blocks.
25  -->
26  </HEAD>
27  <BODY>
28   <!--
29     HTML doesn't do paper pagination, so we need to fake it out.  Basing
30     our formatting upon RFC2068, there are four (4) lines of header and
31     four (4) lines of footer for each page.
32
33 <DIV ALIGN="CENTER">
34  <PRE>
35
36
37
38
39 Coar, et al.               CGI/1.1 Specification                     May, 1998
40 INTERNET-DRAFT             Expires 1 December 1998                    [Page 2]
41
42
43  </PRE>
44 </DIV>
45   -->
46   <!--
47     The following weirdness wrt non-breaking spaces is to get Lynx
48     (which is barely TABLE-aware) to line the left/right justified
49     text up properly.
50   -->
51   <DIV ALIGN="CENTER">
52    <TABLE WIDTH="100%" CELLPADDING=0 CELLSPACING=0>
53     <TR VALIGN="TOP">
54      <TD ALIGN="LEFT">
55       INTERNET-DRAFT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
56      </TD>
57      <TD ALIGN="RIGHT">
58       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ken A L Coar
59      </TD>
60     </TR>
61     <TR VALIGN="TOP">
62      <TD ALIGN="LEFT">
63       draft-coar-cgi-v11-03.{html,txt}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
64      </TD>
65      <TD ALIGN="RIGHT">
66       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM Corporation
67      </TD>
68     </TR>
69     <TR VALIGN="TOP">
70      <TD ALIGN="LEFT">
71       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
72      </TD>
73      <TD ALIGN="RIGHT">
74       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D.R.T. Robinson
75      </TD>
76     </TR>
77     <TR VALIGN="TOP">
78      <TD ALIGN="LEFT">
79       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
80      </TD>
81      <TD ALIGN="RIGHT">
82       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E*TRADE&nbsp;UK&nbsp;Ltd.
83      </TD>
84     </TR>
85     <TR VALIGN="TOP">
86      <TD ALIGN="LEFT">
87       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
88      </TD>
89      <TD ALIGN="RIGHT">
90       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25 June 1999
91      </TD>
92     </TR>
93    </TABLE>
94   </DIV>
95
96   <H1 ALIGN="CENTER">
97    The WWW Common Gateway Interface
98    <BR>
99    Version 1.1
100   </H1>
101
102 <!--#include virtual="I-D-statement" -->
103
104   <H2>
105    <A NAME="Abstract">
106     Abstract
107    </A>
108   </H2>
109   <P>
110   The Common Gateway Interface (CGI) is a simple interface for running
111   external programs, software or gateways under an information server
112   in a platform-independent manner. Currently, the supported information
113   servers are HTTP servers.
114   </P>
115   <P>
116   The interface has been in use by the World-Wide Web since 1993. This
117   specification defines the
118   "current practice" parameters of the
119   'CGI/1.1' interface developed and documented at the U.S. National
120   Centre for Supercomputing Applications [NCSA-CGI].
121   This document also defines the use of the CGI/1.1 interface
122   on the Unix and AmigaDOS(tm) systems.
123   </P>
124   <P>
125   Discussion of this draft occurs on the CGI-WG mailing list; see the
126   project Web page at
127   <SAMP>&lt;URL:<A HREF="http://CGI-Spec.Golux.Com/"
128                 >http://CGI-Spec.Golux.Com/</A>&gt;</SAMP>
129   for details on the mailing list and the status of the project.
130   </P>
131
132 <!--#if expr="$GUI" -->
133   <H2>
134    Revision History
135   </H2>
136   <P>
137   The revision history of this draft is being maintained using Web-based
138   GUI notation, such as struck-through characters and colour-coded
139   sections.  The following legend describes how to determine the origin
140   of a particular revision according to the colour of the text:
141   </P>
142   <DL COMPACT>
143    <DT>Black
144    </DT>
145    <DD>Revision 00, released 28 May 1998
146    </DD>
147    <DT>Green
148    </DT>
149    <DD>Revision 01, released 28 December 1998
150     <BR>
151     Major structure change: Section 4, "Request Metadata (Meta-Variables)"
152     was moved entirely under <A HREF="#7.0">Section 7</A>, "Data Input to the
153     CGI Script."
154     Due to the size of this change, it is noted here and the text in its
155     former location does <EM>not</EM> appear as struckthrough.  This has
156     caused major <A HREF="#6.0">sections 5</A> and following to decrement
157     by one.  Other
158     large text movements are likewise not marked up.  References to RFC
159     1738 were changed to 2396 (1738's replacement).
160    </DD>
161    <DT>Red
162    </DT>
163    <DD>Revision 02, released 2 April, 1999
164     <BR>
165     Added text to <A HREF="#8.3">section 8.3</A> defining correct handling
166     of HTTP/1.1
167     requests using "chunked" Transfer-Encoding.  Labelled metavariable
168     names in <A HREF="#8.0">section 8</A> with the appropriate detail section
169     numbers.
170     Clarified allowed usage of <SAMP>Status</SAMP> and
171     <SAMP>Location</SAMP> response header fields.  Included new
172     Internet-Draft language.
173    </DD>
174    <DT>Fuchsia
175    </DT>
176    <DD>Revision 03, released 25 June 1999
177     <BR>
178     Changed references from "HTTP" to "Protocol-Specific" for the listing of
179     things like HTTP_ACCEPT.  Changed 'entity-body' and 'content-body' to
180     'message-body.'  Added a note that response headers must comply with
181     requirements of the protocol level in use.  Added a lot of stuff about
182     security (section 11).  Clarified a bunch of productions.  Pointed out
183     that zero-length and omitted values are indistinguishable in this
184     specification.  Clarified production describing order of fields in
185     script response header.  Clarified issues surrounding encoding of
186     data.  Acknowledged additional contributors, and changed one of
187     the authors' addresses.
188    </DD>
189   </DL>
190 <!--#endif -->
191
192   <H2>
193    <A NAME="Contents">
194     Table of Contents
195    </A>
196   </H2>
197   <DIV ALIGN="CENTER">
198    <PRE>
199   1 Introduction..............................................<A
200                                                                HREF="#1.0"
201                                                               >TBD</A>
202    1.1 Purpose................................................<A
203                                                                HREF="#1.1"
204                                                               >TBD</A>
205    1.2 Requirements...........................................<A
206                                                                HREF="#1.2"
207                                                               >TBD</A>
208    1.3 Specifications.........................................<A
209                                                                HREF="#1.3"
210                                                               >TBD</A>
211    1.4 Terminology............................................<A
212                                                                HREF="#1.4"
213                                                               >TBD</A>
214   2 Notational Conventions and Generic Grammar................<A
215                                                                HREF="#2.0"
216                                                               >TBD</A>
217    2.1 Augmented BNF..........................................<A
218                                                                HREF="#2.1"
219                                                               >TBD</A>
220    2.2 Basic Rules............................................<A
221                                                                HREF="#2.2"
222                                                               >TBD</A>
223   3 Protocol Parameters.......................................<A
224                                                                HREF="#3.0"
225                                                               >TBD</A>
226    3.1 URL Encoding...........................................<A
227                                                                HREF="#3.1"
228                                                               >TBD</A>
229    3.2 The Script-URI.........................................<A
230                                                                HREF="#3.2"
231                                                               >TBD</A>
232   4 Invoking the Script.......................................<A
233                                                                HREF="#4.0"
234                                                               >TBD</A>
235   5 The CGI Script Command Line...............................<A
236                                                                HREF="#5.0"
237                                                               >TBD</A>
238   6 Data Input to the CGI Script..............................<A
239                                                                HREF="#6.0"
240                                                               >TBD</A>
241    6.1 Request Metadata (Metavariables).......................<A
242                                                                HREF="#6.1"
243                                                               >TBD</A>
244     6.1.1 AUTH_TYPE...........................................<A
245                                                                HREF="#6.1.1"
246                                                               >TBD</A>
247     6.1.2 CONTENT_LENGTH......................................<A
248                                                                HREF="#6.1.2"
249                                                               >TBD</A>
250     6.1.3 CONTENT_TYPE........................................<A
251                                                                HREF="#6.1.3"
252                                                               >TBD</A>
253     6.1.4 GATEWAY_INTERFACE...................................<A
254                                                                HREF="#6.1.4"
255                                                               >TBD</A>
256     6.1.5 Protocol-Specific Metavariables.....................<A
257                                                                HREF="#6.1.5"
258                                                               >TBD</A>
259     6.1.6 PATH_INFO...........................................<A
260                                                                HREF="#6.1.6"
261                                                               >TBD</A>
262     6.1.7 PATH_TRANSLATED.....................................<A
263                                                                HREF="#6.1.7"
264                                                               >TBD</A>
265     6.1.8 QUERY_STRING........................................<A
266                                                                HREF="#6.1.8"
267                                                               >TBD</A>
268     6.1.9 REMOTE_ADDR.........................................<A
269                                                                HREF="#6.1.9"
270                                                               >TBD</A>
271     6.1.10 REMOTE_HOST........................................<A
272                                                                HREF="#6.1.10"
273                                                               >TBD</A>
274     6.1.11 REMOTE_IDENT.......................................<A
275                                                                HREF="#6.1.11"
276                                                               >TBD</A>
277     6.1.12 REMOTE_USER........................................<A
278                                                                HREF="#6.1.12"
279                                                               >TBD</A>
280     6.1.13 REQUEST_METHOD.....................................<A
281                                                                HREF="#6.1.13"
282                                                               >TBD</A>
283     6.1.14 SCRIPT_NAME........................................<A
284                                                                HREF="#6.1.14"
285                                                               >TBD</A>
286     6.1.15 SERVER_NAME........................................<A
287                                                                HREF="#6.1.15"
288                                                               >TBD</A>
289     6.1.16 SERVER_PORT........................................<A
290                                                                HREF="#6.1.16"
291                                                               >TBD</A>
292     6.1.17 SERVER_PROTOCOL....................................<A
293                                                                HREF="#6.1.17"
294                                                               >TBD</A>
295     6.1.18 SERVER_SOFTWARE....................................<A
296                                                                HREF="#6.1.18"
297                                                               >TBD</A>
298     6.2 Request Message-Bodies................................<A
299                                                                HREF="#6.2"
300                                                               >TBD</A>
301   7 Data Output from the CGI Script...........................<A
302                                                                HREF="#7.0"
303                                                               >TBD</A>
304    7.1 Non-Parsed Header Output...............................<A
305                                                                HREF="#7.1"
306                                                               >TBD</A>
307    7.2 Parsed Header Output...................................<A
308                                                                HREF="#7.2"
309                                                               >TBD</A>
310     7.2.1 CGI header fields...................................<A
311                                                                HREF="#7.2.1"
312                                                               >TBD</A>
313      7.2.1.1 Content-Type.....................................<A
314                                                                HREF="#7.2.1.1"
315                                                               >TBD</A>
316      7.2.1.2 Location.........................................<A
317                                                                HREF="#7.2.1.2"
318                                                               >TBD</A>
319      7.2.1.3 Status...........................................<A
320                                                                HREF="#7.2.1.3"
321                                                               >TBD</A>
322      7.2.1.4 Extension header fields..........................<A
323                                                                HREF="#7.2.1.3"
324                                                               >TBD</A>
325     7.2.2 HTTP header fields..................................<A
326                                                                HREF="#7.2.2"
327                                                               >TBD</A>
328   8 Server Implementation.....................................<A
329                                                                HREF="#8.0"
330                                                               >TBD</A>
331    8.1 Requirements for Servers...............................<A
332                                                                HREF="#8.1"
333                                                               >TBD</A>
334     8.1.1 Script-URI..........................................<A
335                                                                HREF="#8.1"
336                                                               >TBD</A>
337     8.1.2 Request Message-body Handling.......................<A
338                                                                HREF="#8.1.2"
339                                                               >TBD</A>
340     8.1.3 Required Metavariables..............................<A
341                                                                HREF="#8.1.3"
342                                                               >TBD</A>
343     8.1.4 Response Compliance.................................<A
344                                                                HREF="#8.1.4"
345                                                               >TBD</A>
346    8.2 Recommendations for Servers............................<A
347                                                                HREF="#8.2"
348                                                               >TBD</A>
349    8.3 Summary of Metavariables...............................<A
350                                                                HREF="#8.3"
351                                                               >TBD</A>
352   9 Script Implementation.....................................<A
353                                                                HREF="#9.0"
354                                                               >TBD</A>
355    9.1 Requirements for Scripts...............................<A
356                                                                HREF="#9.1"
357                                                               >TBD</A>
358    9.2 Recommendations for Scripts............................<A
359                                                                HREF="#9.2"
360                                                               >TBD</A>
361   10 System Specifications....................................<A
362                                                                HREF="#10.0"
363                                                               >TBD</A>
364    10.1 AmigaDOS..............................................<A
365                                                                HREF="#10.1"
366                                                               >TBD</A>
367    10.2 Unix..................................................<A
368                                                                HREF="#10.2"
369                                                               >TBD</A>
370   11 Security Considerations..................................<A
371                                                                HREF="#11.0"
372                                                               >TBD</A>
373    11.1 Safe Methods..........................................<A
374                                                                HREF="#11.1"
375                                                               >TBD</A>
376    11.2 HTTP Header Fields Containing Sensitive Information...<A
377                                                                HREF="#11.2"
378                                                               >TBD</A>
379    11.3 Script Interference with the Server...................<A
380                                                                HREF="#11.3"
381                                                               >TBD</A>
382    11.4 Data Length and Buffering Considerations..............<A
383                                                                HREF="#11.4"
384                                                               >TBD</A>
385    11.5 Stateless Processing..................................<A
386                                                                HREF="#11.5"
387                                                               >TBD</A>
388   12 Acknowledgments..........................................<A
389                                                                HREF="#12.0"
390                                                               >TBD</A>
391   13 References...............................................<A
392                                                                HREF="#13.0"
393                                                               >TBD</A>
394   14 Authors' Addresses.......................................<A
395                                                                HREF="#14.0"
396                                                               >TBD</A>
397      </PRE>
398   </DIV>
399
400   <H2>
401    <A NAME="1.0">
402     1. Introduction
403    </A>
404   </H2>
405
406   <H3>
407    <A NAME="1.1">
408     1.1. Purpose
409    </A>
410   </H3>
411   <P>
412   Together the HTTP [<A HREF="#[3]">3</A>,<A HREF="#[8]">8</A>] server
413   and the CGI script are responsible
414   for servicing a client
415   request by sending back responses. The client
416   request comprises a Universal Resource Identifier (URI)
417   [<A HREF="#[1]">1</A>], a
418   request method, and various ancillary
419   information about the request
420   provided by the transport mechanism.
421   </P>
422   <P>
423   The CGI defines the abstract parameters, known as
424   metavariables,
425   which describe the client's
426   request. Together with a
427   concrete programmer interface this specifies a platform-independent
428   interface between the script and the HTTP server.
429   </P>
430
431   <H3>
432    <A NAME="1.2">
433     1.2. Requirements
434    </A>
435   </H3>
436   <P>
437   This specification uses the same words as RFC 1123
438   [<A HREF="#[5]">5</A>] to define the
439   significance of each particular requirement. These are:
440   </P><!--#if expr="! $GUI" -->
441   <P></P><!--#endif -->
442   <DL>
443    <DT><EM>MUST</EM>
444    </DT>
445    <DD>
446     <P>
447     This word or the adjective 'required' means that the item is an
448     absolute requirement of the specification.
449     </P>
450    </DD>
451    <DT><EM>SHOULD</EM>
452    </DT>
453    <DD>
454     <P>
455     This word or the adjective 'recommended' means that there may
456     exist valid reasons in particular circumstances to ignore this
457     item, but the full implications should be understood and the case
458     carefully weighed before choosing a different course.
459     </P>
460    </DD>
461    <DT><EM>MAY</EM>
462    </DT>
463    <DD>
464     <P>
465     This word or the adjective 'optional' means that this item is
466     truly optional. One vendor may choose to include the item because
467     a particular marketplace requires it or because it enhances the
468     product, for example; another vendor may omit the same item.
469     </P>
470    </DD>
471   </DL>
472   <P>
473   An implementation is not compliant if it fails to satisfy one or more
474   of the 'must' requirements for the protocols it implements. An
475   implementation that satisfies all of the 'must' and all of the
476   'should' requirements for its features is said to be 'unconditionally
477   compliant'; one that satisfies all of the 'must' requirements but not
478   all of the 'should' requirements for its features is said to be
479   'conditionally compliant.'
480   </P>
481
482   <H3>
483    <A NAME="1.3">
484     1.3. Specifications
485    </A>
486   </H3>
487   <P>
488   Not all of the functions and features of the CGI are defined in the
489   main part of this specification. The following phrases are used to
490   describe the features which are not specified:
491   </P>
492   <DL>
493    <DT><EM>system defined</EM>
494    </DT>
495    <DD>
496     <P>
497     The feature may differ between systems, but must be the same for
498     different implementations using the same system. A system will
499     usually identify a class of operating-systems. Some systems are
500     defined in
501     <A HREF="#10.0"
502     >section 10</A> of this document.
503     New systems may be defined
504     by new specifications without revision of this document.
505     </P>
506    </DD>
507    <DT><EM>implementation defined</EM>
508    </DT>
509    <DD>
510     <P>
511     The behaviour of the feature may vary from implementation to
512     implementation, but a particular implementation must document its
513     behaviour.
514     </P>
515    </DD>
516   </DL>
517
518   <H3>
519    <A NAME="1.4">
520     1.4. Terminology
521    </A>
522   </H3>
523   <P>
524   This specification uses many terms defined in the HTTP/1.1
525   specification [<A HREF="#[8]">8</A>]; however, the following terms are
526   used here in a
527   sense which may not accord with their definitions in that document,
528   or with their common meaning.
529   </P>
530
531   <DL>
532    <DT><EM>metavariable</EM>
533    </DT>
534    <DD>
535     <P>
536     A named parameter that carries information from the server to the
537     script. It is not necessarily a variable in the operating-system's
538     environment, although that is the most common implementation.
539     </P>
540    </DD>
541
542    <DT><EM>script</EM>
543    </DT>
544    <DD>
545     <P>
546     The software which is invoked by the server <EM>via</EM> this
547     interface. It
548     need not be a standalone program, but could be a
549     dynamically-loaded or shared library, or even a subroutine in the
550     server.  It <EM>may</EM> be a set of statements
551     interpreted at run-time, as the term 'script' is frequently
552     understood, but that is not a requirement and within the context
553     of this specification the term has the broader definition stated.
554     </P>
555    </DD>
556    <DT><EM>server</EM>
557    </DT>
558    <DD>
559     <P>
560     The application program which invokes the script in order to service
561     requests.
562     </P>
563    </DD>
564   </DL>
565
566   <H2>
567    <A NAME="2.0">
568     2. Notational Conventions and Generic Grammar
569    </A>
570   </H2>
571
572   <H3>
573    <A NAME="2.1">
574     2.1. Augmented BNF
575    </A>
576   </H3>
577   <P>
578   All of the mechanisms specified in this document are described in
579   both prose and an augmented Backus-Naur Form (BNF) similar to that
580   used by RFC 822 [<A HREF="#[6]">6</A>]. This augmented BNF contains
581   the following constructs:
582   </P>
583   <DL>
584    <DT>name = definition
585    </DT>
586    <DD>
587     <P>
588     The
589     definition by the equal character ("="). Whitespace is only
590     significant in that continuation lines of a definition are
591     indented.
592     </P>
593    </DD>
594    <DT>"literal"
595    </DT>
596    <DD>
597     <P>
598     Quotation marks (") surround literal text, except for a literal
599     quotation mark, which is surrounded by angle-brackets ("&lt;" and "&gt;").
600     Unless stated otherwise, the text is case-sensitive.
601     </P>
602    </DD>
603    <DT>rule1 | rule2
604    </DT>
605    <DD>
606     <P>
607     Alternative rules are separated by a vertical bar ("|").
608     </P>
609    </DD>
610    <DT>(rule1 rule2 rule3)
611    </DT>
612    <DD>
613     <P>
614     Elements enclosed in parentheses are treated as a single element.
615     </P>
616    </DD>
617    <DT>*rule
618    </DT>
619    <DD>
620     <P>
621     A rule preceded by an asterisk ("*") may have zero or more
622     occurrences. A rule preceded by an integer followed by an asterisk
623     must occur at least the specified number of times.
624     </P>
625    </DD>
626    <DT>[rule]
627    </DT>
628    <DD>
629     <P>
630     An element enclosed in square
631     brackets ("[" and "]") is optional.
632     </P>
633    </DD>
634   </DL>
635
636   <H3>
637    <A NAME="2.2">
638     2.2. Basic Rules
639    </A>
640   </H3>
641   <P>
642   The following rules are used throughout this specification to
643   describe basic parsing constructs.
644   </P><!--#if expr="! $GUI" -->
645   <P></P><!--#endif -->
646   <PRE>
647     alpha         = lowalpha | hialpha
648     alphanum      = alpha | digit
649     lowalpha      = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h"
650                     | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p"
651                     | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x"
652                     | "y" | "z"
653     hialpha       = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H"
654                     | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P"
655                     | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X"
656                     | "Y" | "Z"
657     digit         = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7"
658                     | "8" | "9"
659     hex           = digit | "A" | "B" | "C" | "D" | "E" | "F" | "a"
660                     | "b" | "c" | "d" | "e" | "f"
661     escaped       = "%" hex hex
662     OCTET         = &lt;any 8-bit sequence of data&gt;
663     CHAR          = &lt;any US-ASCII character (octets 0 - 127)&gt;
664     CTL           = &lt;any US-ASCII control character
665                     (octets 0 - 31) and DEL (127)&gt;
666     CR            = &lt;US-ASCII CR, carriage return (13)&gt;
667     LF            = &lt;US-ASCII LF, linefeed (10)&gt;
668     SP            = &lt;US-ASCII SP, space (32)&gt;
669     HT            = &lt;US-ASCII HT, horizontal tab (9)&gt;
670     NL            = CR | LF
671     LWSP          = SP | HT | NL
672     tspecial      = "(" | ")" | "@" | "," | ";" | ":" | "\" | &lt;"&gt;
673                     | "/" | "[" | "]" | "?" | "&lt;" | "&gt;" | "{" | "}"
674                     | SP | HT | NL
675     token         = 1*&lt;any CHAR except CTLs or tspecials&gt;
676     quoted-string = ( &lt;"&gt; *qdtext &lt;"&gt; ) | ( "&lt;" *qatext "&gt;")
677     qdtext        = &lt;any CHAR except &lt;"&gt; and CTLs but including LWSP&gt;
678     qatext        = &lt;any CHAR except "&lt;", "&gt;" and CTLs but
679                     including LWSP&gt;
680     mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
681     unreserved    = alphanum | mark
682     reserved      = ";" | "/" | "?" | ":" | "@" | "&amp;" | "=" |
683                     "$" | ","
684     uric          = reserved | unreserved | escaped
685   </PRE>
686   <P>
687   Note that newline (NL) need not be a single character, but can be a
688   character sequence.
689   </P>
690
691   <H2>
692    <A NAME="3.0">
693     3. Protocol Parameters
694    </A>
695   </H2>
696
697   <H3>
698    <A NAME="3.1">
699     3.1. URL Encoding
700    </A>
701   </H3>
702   <P>
703   Some variables and constructs used here are described as being
704   'URL-encoded'. This encoding is described in section
705   2 of RFC
706   2396
707   [<A HREF="#[4]">4</A>].
708   </P>
709   <P>
710   An alternate "shortcut" encoding for representing the space
711   character exists and is in common use.  Scripts MUST be prepared to
712   recognise both '+' and '%20' as an encoded space in a
713   URL-encoded value.
714   </P>
715   <P>
716   Note that some unsafe characters may have different semantics if
717   they are encoded. The definition of which characters are unsafe
718   depends on the context.
719   For example, the following two URLs do not
720   necessarily refer to the same resource:
721   </P><!--#if expr="! $GUI" -->
722   <P></P><!--#endif -->
723   <PRE>
724     http://somehost.com/somedir%2Fvalue
725     http://somehost.com/somedir/value
726   </PRE>
727   <P>
728   See section
729   2 of RFC
730   2396 [<A HREF="#[4]">4</A>]
731   for authoritative treatment of this issue.
732   </P>
733
734   <H3>
735    <A NAME="3.2">
736     3.2. The Script-URI
737    </A>
738   </H3>
739   <P>
740   The 'Script-URI' is defined as the URI of the resource identified
741   by the metavariables.   Often,
742   this URI will be the same as
743   the URI requested by the client (the 'Client-URI'); however, it need
744   not be. Instead, it could be a URI invented by the server, and so it
745   can only be used in the context of the server and its CGI interface.
746   </P>
747   <P>
748   The Script-URI has the syntax of generic-RL as defined in section 2.1
749   of RFC 1808 [<A HREF="#[7]">7</A>], with the exception that object
750   parameters and
751   fragment identifiers are not permitted:
752   </P><!--#if expr="! $GUI" -->
753   <P></P><!--#endif -->
754   <PRE>
755     &lt;scheme&gt;://&lt;host&gt;&lt;port&gt;/&lt;path&gt;?&lt;query&gt;
756   </PRE>
757   <P>
758   The various components of the
759   Script-URI
760   are defined by some of the
761   metavariables (see
762   <A HREF="#4.0">section 4</A>
763   below);
764   </P><!--#if expr="! $GUI" -->
765   <P></P><!--#endif -->
766   <PRE>
767     script-uri = protocol "://" SERVER_NAME ":" SERVER_PORT enc-script
768                  enc-path-info "?" QUERY_STRING
769   </PRE>
770   <P>
771   where 'protocol' is obtained
772   from SERVER_PROTOCOL, 'enc-script' is a
773   URL-encoded version of SCRIPT_NAME and 'enc-path-info' is a
774   URL-encoded version of PATH_INFO.  See
775   <A HREF="#4.6">section 4.6</A> for more information about the PATH_INFO
776   metavariable.
777   </P>
778   <P>
779   Note that the scheme and the protocol are <EM>not</EM> identical;
780   for instance, a resource accessed <EM>via</EM> an SSL mechanism
781   may have a Client-URI with a scheme of "<SAMP>https</SAMP>"
782   rather than "<SAMP>http</SAMP>".   CGI/1.1 provides no means
783   for the script to reconstruct this, and therefore
784   the Script-URI includes the base protocol used.
785   </P>
786
787   <H2>
788    <A NAME="4.0">
789     4. Invoking the Script
790    </A>
791   </H2>
792   <P>
793   The
794   script is invoked in a system defined manner. Unless specified
795   otherwise, the file containing the script will be invoked as an
796   executable program.
797   </P>
798
799   <H2>
800    <A NAME="5.0">
801     5. The CGI Script Command Line
802    </A>
803   </H2>
804   <P>
805   Some systems support a method for supplying an array of strings to
806   the CGI script. This is only used in the case of an 'indexed' query.
807   This is identified by a "GET" or "HEAD" HTTP request with a URL
808   query
809   string not containing any unencoded "=" characters. For such a
810   request,
811   servers SHOULD parse the search string
812   into words, using the following rules:
813   </P><!--#if expr="! $GUI" -->
814   <P></P><!--#endif -->
815   <PRE>
816     search-string = search-word *( "+" search-word )
817     search-word   = 1*schar
818     schar         = xunreserved | escaped | xreserved
819     xunreserved   = alpha | digit | xsafe | extra
820     xsafe         = "$" | "-" | "_" | "."
821     xreserved     = ";" | "/" | "?" | ":" | "@" | "&"
822   </PRE>
823   <P>
824   After parsing, each word is URL-decoded, optionally encoded in a
825   system defined manner,
826   and then the argument list is set to the list
827   of words.
828   </P>
829   <P>
830   If the server cannot create any part of the argument list, then the
831   server SHOULD NOT generate any command line information. For example, the
832   number of arguments may be greater than operating system or server
833   limitations permit, or one of the words may not be representable as an
834   argument.
835   </P>
836   <P>
837   Scripts SHOULD check to see if the QUERY_STRING value contains an
838   unencoded "=" character, and SHOULD NOT use the command line arguments
839   if it does.
840   </P>
841
842   <H2>
843    <A NAME="6.0">
844     6. Data Input to the CGI Script
845    </A>
846   </H2>
847   <P>
848   Information about a request comes from two different sources: the
849   request header, and any associated
850   message-body.
851   Servers MUST
852   make portions of this information available to
853    scripts.
854   </P>
855
856   <H3>
857    <A NAME="6.1">
858     6.1. Request Metadata
859     (Metavariables)
860    </A>
861   </H3>
862   <P>
863   Each CGI server
864   implementation MUST define a mechanism
865   to pass data about the request from
866   the server to the script.
867   The metavariables containing these
868   data
869   are accessed by the script in a system
870   defined manner.
871   The
872   representation of the characters in the
873   metavariables is
874   system defined.
875   </P>
876   <P>
877   This specification does not distinguish between the representation of
878   null values and missing ones.  Whether null or missing values
879   (such as a query component of "?" or "", respectively) are represented
880   by undefined metavariables or by metavariables with values of "" is
881   implementation-defined.
882   </P>
883   <P>
884   Case is not significant in the
885   metavariable
886   names, in that there cannot be two
887   different variables
888   whose names differ in case only. Here they are
889   shown using a canonical representation of capitals plus underscore
890   ("_"). The actual representation of the names is system defined; for
891   a particular system the representation MAY be defined differently
892   than this.
893   </P>
894   <P>
895   Metavariable
896   values MUST be
897   considered case-sensitive except as noted
898   otherwise.
899   </P>
900   <P>
901   The canonical
902   metavariables
903   defined by this specification are:
904   </P><!--#if expr="! $GUI" -->
905   <P></P><!--#endif -->
906   <PRE>
907     AUTH_TYPE
908     CONTENT_LENGTH
909     CONTENT_TYPE
910     GATEWAY_INTERFACE
911     PATH_INFO
912     PATH_TRANSLATED
913     QUERY_STRING
914     REMOTE_ADDR
915     REMOTE_HOST
916     REMOTE_IDENT
917     REMOTE_USER
918     REQUEST_METHOD
919     SCRIPT_NAME
920     SERVER_NAME
921     SERVER_PORT
922     SERVER_PROTOCOL
923     SERVER_SOFTWARE
924   </PRE>
925   <P>
926   Metavariables with names beginning with the protocol name (<EM>e.g.</EM>,
927   "HTTP_ACCEPT") are also canonical in their description of request header
928   fields.  The number and meaning of these fields may change independently
929   of this specification.  (See also <A HREF="#6.1.5">section 6.1.5</A>.)
930   </P>
931
932   <H4>
933    <A NAME="6.1.1">
934     6.1.1. AUTH_TYPE
935    </A>
936   </H4>
937   <P>
938   This variable is specific to requests made
939   <EM>via</EM> the
940   "<CODE>http</CODE>"
941   scheme.
942   </P>
943   <P>
944   If the Script-URI
945   required access authentication for external
946   access, then the server
947   MUST set
948   the value of
949   this variable
950   from the '<SAMP>auth-scheme</SAMP>' token in
951   the request's "<SAMP>Authorization</SAMP>" header
952   field.
953   Otherwise
954   it is
955   set to NULL.
956   </P><!--#if expr="! $GUI" -->
957   <P></P><!--#endif -->
958   <PRE>
959     AUTH_TYPE   = "" | auth-scheme
960     auth-scheme = "Basic" | "Digest" | token
961   </PRE>
962   <P>
963   HTTP access authentication schemes are described in section 11 of the
964   HTTP/1.1 specification [<A HREF="#[8]">8</A>]. The auth-scheme is
965   not case-sensitive.
966   </P>
967   <P>
968   Servers
969   MUST
970   provide this metavariable
971   to scripts if the request
972   header included an "<SAMP>Authorization</SAMP>" field
973   that was authenticated.
974   </P>
975
976   <H4>
977    <A NAME="6.1.2">
978     6.1.2. CONTENT_LENGTH
979    </A>
980   </H4>
981   <P>
982   This
983   metavariable
984   is set to the
985   size of the message-body
986   entity attached to the request, if any, in decimal
987   number of octets. If no data are attached, then this
988   metavariable
989   is either NULL or not
990   defined. The syntax is
991   the same as for
992   the HTTP "<SAMP>Content-Length</SAMP>" header field (section 14.14, HTTP/1.1
993   specification [<A HREF="#[8]">8</A>]).
994   </P><!--#if expr="! $GUI" -->
995   <P></P><!--#endif -->
996   <PRE>
997     CONTENT_LENGTH = "" | 1*digit
998   </PRE>
999   <P>
1000   Servers MUST provide this metavariable
1001   to scripts if the request
1002   was accompanied by a
1003   message-body entity.
1004   </P>
1005
1006   <H4>
1007    <A NAME="6.1.3">
1008     6.1.3. CONTENT_TYPE
1009    </A>
1010   </H4>
1011   <P>
1012   If the request includes a
1013   message-body,
1014   CONTENT_TYPE is set
1015   to
1016   the Internet Media Type
1017   [<A HREF="#[9]">9</A>] of the attached
1018   entity if the type was provided <EM>via</EM>
1019   a "<SAMP>Content-type</SAMP>" field in the
1020   request header, or if the server can determine it in the absence
1021   of a supplied "<SAMP>Content-type</SAMP>" field. The syntax is the
1022   same as for the HTTP
1023   "<SAMP>Content-Type</SAMP>" header field.
1024   </P><!--#if expr="! $GUI" -->
1025   <P></P><!--#endif -->
1026   <PRE>
1027     CONTENT_TYPE = "" | media-type
1028     media-type   = type "/" subtype *( ";" parameter)
1029     type         = token
1030     subtype      = token
1031     parameter    = attribute "=" value
1032     attribute    = token
1033     value        = token | quoted-string
1034   </PRE>
1035   <P>
1036   The type, subtype,
1037   and parameter attribute names are not
1038   case-sensitive. Parameter values MAY be case sensitive.
1039   Media types and their use in HTTP are described
1040   in section 3.7 of the
1041   HTTP/1.1 specification [<A HREF="#[8]">8</A>].
1042   </P>
1043   <P>
1044   Example:
1045   </P><!--#if expr="! $GUI" -->
1046   <P></P><!--#endif -->
1047   <PRE>
1048     application/x-www-form-urlencoded
1049   </PRE>
1050   <P>
1051   There is no default value for this variable. If and only if it is
1052   unset, then the script MAY attempt to determine the media type from
1053   the data received. If the type remains unknown, then
1054   the script MAY choose to either assume a
1055   content-type of
1056   <SAMP>application/octet-stream</SAMP>
1057   or reject the request with  a 415 ("Unsupported Media Type")
1058   error.  See <A HREF="#7.2.1.3">section 7.2.1.3</A>
1059   for more information about returning error status values.
1060   </P>
1061   <P>
1062   Servers MUST provide this metavariable
1063   to scripts if
1064   a "<SAMP>Content-Type</SAMP>" field was present
1065   in the original request header.  If the server receives a request
1066   with an attached entity but no "<SAMP>Content-Type</SAMP>"
1067   header field, it MAY attempt to
1068   determine the correct datatype, or it MAY omit this
1069   metavariable when
1070   communicating the request information to the script.
1071   </P>
1072
1073   <H4>
1074    <A NAME="6.1.4">
1075     6.1.4. GATEWAY_INTERFACE
1076    </A>
1077   </H4>
1078   <P>
1079   This
1080   metavariable
1081   is set to
1082   the dialect of CGI being used
1083   by the server to communicate with the script.
1084   Syntax:
1085   </P><!--#if expr="! $GUI" -->
1086   <P></P><!--#endif -->
1087   <PRE>
1088     GATEWAY_INTERFACE = "CGI" "/" major "." minor
1089     major             = 1*digit
1090     minor             = 1*digit
1091   </PRE>
1092   <P>
1093   Note that the major and minor numbers are treated as separate
1094   integers and hence each may be
1095   more than a single
1096   digit. Thus CGI/2.4 is a lower version than CGI/2.13 which in turn
1097   is lower than CGI/12.3. Leading zeros in either
1098   the major or the minor number MUST be ignored by scripts and
1099   SHOULD NOT be generated by servers.
1100   </P>
1101   <P>
1102   This document defines the 1.1 version of the CGI interface
1103   ("CGI/1.1").
1104   </P>
1105   <P>
1106   Servers MUST provide this metavariable
1107   to scripts.
1108   </P>
1109
1110   <H4>
1111    <A NAME="6.1.5">
1112     6.1.5. Protocol-Specific Metavariables
1113    </A>
1114   </H4>
1115   <P>
1116   These metavariables are specific to
1117   the protocol
1118   <EM>via</EM> which the request is made.
1119   Interpretation of these variables depends on the value of
1120   the
1121   SERVER_PROTOCOL
1122   metavariable
1123   (see
1124   <A HREF="#6.1.17">section 6.1.17</A>).
1125   </P>
1126   <P>
1127   Metavariables
1128   with names beginning with "HTTP_" contain
1129   values from the request header, if the
1130   scheme used was HTTP.
1131   Each
1132   HTTP header field name is converted to upper case, has all occurrences of
1133   "-" replaced with "_",
1134   and has "HTTP_" prepended to  form
1135   the metavariable name.
1136   Similar transformations are applied for other
1137   protocols.
1138   The header data MAY be presented as sent
1139   by the client, or MAY be rewritten in ways which do not change its
1140   semantics. If multiple header fields with the same field-name are received
1141   then  the server
1142   MUST  rewrite them as though they
1143   had been received as a single header field having the same
1144   semantics before being represented in a
1145   metavariable.
1146   Similarly, a header field that is received on more than one line
1147   MUST be merged into a single line. The server MUST, if necessary,
1148   change the representation of the data (for example, the character
1149   set) to be appropriate for a CGI
1150   metavariable.
1151   <!-- ###NOTE: See if 2068 describes this thoroughly, and
1152   point there if so. -->
1153   </P>
1154   <P>
1155   Servers are
1156   not required to create
1157   metavariables for all
1158   the request
1159   header fields that they
1160   receive. In particular,
1161   they MAY
1162   decline to make available any
1163   header fields carrying authentication information, such as
1164   "<SAMP>Authorization</SAMP>", or
1165   which are available to the script
1166   <EM>via</EM> other metavariables,
1167   such as "<SAMP>Content-Length</SAMP>" and "<SAMP>Content-Type</SAMP>".
1168   </P>
1169
1170   <H4>
1171    <A NAME="6.1.6">
1172     6.1.6. PATH_INFO
1173    </A>
1174   </H4>
1175   <P>
1176   The PATH_INFO
1177   metavariable
1178   specifies
1179   a path to be interpreted by the CGI script. It identifies the
1180   resource or sub-resource to be returned
1181   by the CGI
1182   script, and it is derived from the portion
1183   of the URI path following the script name but preceding
1184   any query data.
1185   The syntax
1186   and semantics are similar to a decoded HTTP URL
1187   'path' token
1188   (defined in
1189   RFC 2396
1190   [<A HREF="#[4]">4</A>]), with the exception
1191   that a PATH_INFO of "/"
1192   represents a single void path segment.
1193   </P><!--#if expr="! $GUI" -->
1194   <P></P><!--#endif -->
1195   <PRE>
1196     PATH_INFO = "" | ( "/" path )
1197     path      = segment *( "/" segment )
1198     segment   = *pchar
1199     pchar     = &lt;any CHAR except "/"&gt;
1200   </PRE>
1201   <P>
1202   The PATH_INFO string is the trailing part of the &lt;path&gt; component of
1203   the Script-URI
1204   (see <A HREF="#3.2">section 3.2</A>)
1205   that follows the SCRIPT_NAME
1206   portion of the path.
1207   </P>
1208   <P>
1209   Servers MAY impose their own restrictions and
1210   limitations on what values they will accept for PATH_INFO, and MAY
1211   reject or edit any values they
1212   consider objectionable before passing
1213   them to the script.
1214   </P>
1215   <P>
1216   Servers MUST make this URI component available
1217   to CGI scripts.  The PATH_INFO
1218   value is case-sensitive, and the
1219   server MUST preserve the case of the PATH_INFO element of the URI
1220   when making it available to scripts.
1221   </P>
1222
1223   <H4>
1224    <A NAME="6.1.7">
1225     6.1.7. PATH_TRANSLATED
1226    </A>
1227   </H4>
1228   <P>
1229   PATH_TRANSLATED is derived by taking any path-info component of the
1230   request URI (see
1231   <A HREF="#6.1.6">section 6.1.6</A>), decoding it
1232   (see <A HREF="#3.1">section 3.1</A>), parsing it as a URI in its own
1233   right, and performing any virtual-to-physical
1234   translation appropriate to map it onto the
1235   server's document repository structure.
1236   If the request URI includes no path-info
1237   component, the PATH_TRANSLATED metavariable SHOULD NOT be defined.
1238   </P><!--#if expr="! $GUI" -->
1239   <P></P><!--#endif -->
1240   <PRE>
1241     PATH_TRANSLATED = *CHAR
1242   </PRE>
1243   <P>
1244   For a request such as the following:
1245   </P><!--#if expr="! $GUI" -->
1246   <P></P><!--#endif -->
1247   <PRE>
1248     http://somehost.com/cgi-bin/somescript/this%2eis%2epath%2einfo
1249   </PRE>
1250   <P>
1251   the PATH_INFO component would be decoded, and the result
1252   parsed as though it were a request for the following:
1253   </P><!--#if expr="! $GUI" -->
1254   <P></P><!--#endif -->
1255   <PRE>
1256     http://somehost.com/this.is.the.path.info
1257   </PRE>
1258   <P>
1259   This would then be translated to a
1260   location in the server's document repository,
1261   perhaps a filesystem path something
1262   like this:
1263   </P><!--#if expr="! $GUI" -->
1264   <P></P><!--#endif -->
1265   <PRE>
1266     /usr/local/www/htdocs/this.is.the.path.info
1267   </PRE>
1268   <P>
1269   The result of the translation is the value of PATH_TRANSLATED.
1270   </P>
1271   <P>
1272   The value of PATH_TRANSLATED may or may not map to a valid
1273   repository
1274   location.
1275   Servers MUST preserve the case of the path-info
1276   segment if and only if the underlying
1277   repository
1278   supports case-sensitive
1279   names.  If the
1280   repository
1281   is only case-aware, case-preserving, or case-blind
1282   with regard to
1283   document names,
1284   servers are not required to preserve the
1285   case of the original segment through the translation.
1286   </P>
1287   <P>
1288   The
1289   translation
1290   algorithm the server uses to derive PATH_TRANSLATED is
1291   implementation defined; CGI scripts which use this variable may
1292   suffer limited portability.
1293   </P>
1294   <P>
1295   Servers SHOULD provide this metavariable
1296   to scripts if and only if the request URI includes a
1297   path-info component.
1298   </P>
1299
1300   <H4>
1301    <A NAME="6.1.8">
1302     6.1.8. QUERY_STRING
1303    </A>
1304   </H4>
1305   <P>
1306   A URL-encoded
1307   string; the &lt;query&gt; part of the
1308   Script-URI.
1309   (See
1310   <A HREF="#3.2">section 3.2</A>.)
1311   </P><!--#if expr="! $GUI" -->
1312   <P></P><!--#endif -->
1313   <PRE>
1314     QUERY_STRING = query-string
1315     query-string = *uric
1316   </PRE>
1317   <P>
1318   The URL syntax for a  query
1319   string is described in
1320   section 3 of
1321   RFC 2396
1322   [<A HREF="#[4]">4</A>].
1323   </P>
1324   <P>
1325   Servers MUST supply this value to scripts.
1326   The QUERY_STRING value is case-sensitive.
1327   If the Script-URI does not include a query component,
1328   the QUERY_STRING metavariable MUST be defined as an empty string ("").
1329   </P>
1330
1331   <H4>
1332    <A NAME="6.1.9">
1333     6.1.9. REMOTE_ADDR
1334    </A>
1335   </H4>
1336   <P>
1337   The IP address of the client
1338   sending the request to the server. This
1339   is not necessarily that of the user
1340   agent
1341   (such as if the request came through a proxy).
1342   </P><!--#if expr="! $GUI" -->
1343   <P></P><!--#endif -->
1344   <PRE>
1345     REMOTE_ADDR  = hostnumber
1346     hostnumber   = ipv4-address | ipv6-address
1347   </PRE>
1348   <P>
1349   The definitions of <SAMP>ipv4-address</SAMP> and <SAMP>ipv6-address</SAMP>
1350   are provided in Appendix B of RFC 2373 [<A HREF="#[13]">13</A>].
1351   </P>
1352   <P>
1353   Servers MUST supply this value to scripts.
1354   </P>
1355
1356   <H4>
1357    <A NAME="6.1.10">
1358     6.1.10. REMOTE_HOST
1359    </A>
1360   </H4>
1361   <P>
1362   The fully qualified domain name of the
1363   client sending the request to
1364   the server, if available, otherwise NULL.
1365   (See <A HREF="#6.1.9">section 6.1.9</A>.)
1366   Fully qualified domain names take the form as described in
1367   section 3.5 of RFC 1034 [<A HREF="#[10]">10</A>] and section 2.1 of
1368   RFC 1123 [<A HREF="#[5]">5</A>].  Domain names are not case sensitive.
1369   </P>
1370   <P>
1371   Servers SHOULD provide this information to
1372   scripts.
1373   </P>
1374
1375   <H4>
1376    <A NAME="6.1.11">
1377     6.1.11. REMOTE_IDENT
1378    </A>
1379   </H4>
1380   <P>
1381   The identity information reported about the connection by a
1382   RFC 1413 [<A HREF="#[11]">11</A>] request to the remote agent, if
1383   available. Servers
1384   MAY choose not
1385   to support this feature, or not to request the data
1386   for efficiency reasons.
1387   </P><!--#if expr="! $GUI" -->
1388   <P></P><!--#endif -->
1389   <PRE>
1390     REMOTE_IDENT = *CHAR
1391   </PRE>
1392   <P>
1393   The data returned
1394   may be used for authentication purposes, but the level
1395   of trust reposed in them should be minimal.
1396   </P>
1397   <P>
1398   Servers MAY supply this information to scripts if the
1399   RFC1413 [<A HREF="#[11]">11</A>] lookup is performed.
1400   </P>
1401
1402   <H4>
1403    <A NAME="6.1.12">
1404     6.1.12. REMOTE_USER
1405    </A>
1406   </H4>
1407   <P>
1408   If the request required authentication using the "Basic"
1409   mechanism (<EM>i.e.</EM>, the AUTH_TYPE
1410   metavariable is set
1411   to "Basic"), then the value of the REMOTE_USER
1412   metavariable is set to the
1413   user-ID supplied.  In all other cases
1414   the value of this metavariable
1415   is undefined.
1416   </P><!--#if expr="! $GUI" -->
1417   <P></P><!--#endif -->
1418   <PRE>
1419     REMOTE_USER = *OCTET
1420   </PRE>
1421   <P>
1422   This variable is specific to requests made <EM>via</EM> the
1423   HTTP protocol.
1424   </P>
1425   <P>
1426   Servers SHOULD provide this metavariable
1427   to scripts.
1428   </P>
1429
1430   <H4>
1431    <A NAME="6.1.13">
1432     6.1.13. REQUEST_METHOD
1433    </A>
1434   </H4>
1435   <P>
1436   The REQUEST_METHOD
1437   metavariable
1438   is set to the
1439   method with which the request was made, as described in section
1440   5.1.1 of the HTTP/1.0 specification [<A HREF="#[3]">3</A>] and
1441   section 5.1.1 of the
1442   HTTP/1.1 specification [<A HREF="#[8]">8</A>].
1443   </P><!--#if expr="! $GUI" -->
1444   <P></P><!--#endif -->
1445   <PRE>
1446     REQUEST_METHOD   = http-method
1447     http-method      = "GET" | "HEAD" | "POST" | "PUT" | "DELETE"
1448                        | "OPTIONS" | "TRACE" | extension-method
1449     extension-method = token
1450   </PRE>
1451   <P>
1452   The method is case sensitive.
1453   CGI/1.1 servers MAY choose to process some methods
1454   directly rather than passing them to scripts.
1455   </P>
1456   <P>
1457   This variable is specific to requests made with HTTP.
1458   </P>
1459   <P>
1460   Servers MUST provide this metavariable
1461   to scripts.
1462   </P>
1463
1464   <H4>
1465    <A NAME="6.1.14">
1466     6.1.14. SCRIPT_NAME
1467    </A>
1468   </H4>
1469   <P>
1470   The SCRIPT_NAME
1471   metavariable
1472   is
1473   set to a URL path that could identify the CGI script (rather than the
1474   script's
1475   output). The syntax and semantics are identical to a
1476   decoded HTTP URL 'path' token
1477   (see RFC 2396
1478   [<A HREF="#[4]">4</A>]).
1479   </P><!--#if expr="! $GUI" -->
1480   <P></P><!--#endif -->
1481   <PRE>
1482     SCRIPT_NAME = "" | ( "/" [ path ] )
1483   </PRE>
1484   <P>
1485   The SCRIPT_NAME string is some leading part of the &lt;path&gt; component
1486   of the Script-URI derived in some
1487   implementation defined manner.
1488   No PATH_INFO or QUERY_STRING segments
1489   (see sections <A HREF="#6.1.6">6.1.6</A> and
1490   <A HREF="#6.1.8">6.1.8</A>) are included
1491   in the SCRIPT_NAME value.
1492   </P>
1493   <P>
1494   Servers MUST provide this metavariable
1495   to scripts.
1496   </P>
1497
1498   <H4>
1499    <A NAME="6.1.15">
1500     6.1.15. SERVER_NAME
1501    </A>
1502   </H4>
1503   <P>
1504   The SERVER_NAME
1505   metavariable
1506   is set to the
1507   name  of the
1508   server, as
1509   derived from the &lt;host&gt; part of the
1510   Script-URI
1511   (see <A HREF="#3.2">section 3.2</A>).
1512   </P><!--#if expr="! $GUI" -->
1513   <P></P><!--#endif -->
1514   <PRE>
1515     SERVER_NAME = hostname | hostnumber
1516   </PRE>
1517   <P>
1518   Servers MUST provide this metavariable
1519   to scripts.
1520   </P>
1521
1522   <H4>
1523    <A NAME="6.1.16">
1524     6.1.16. SERVER_PORT
1525    </A>
1526   </H4>
1527   <P>
1528   The SERVER_PORT
1529   metavariable
1530   is set to the
1531   port on which the
1532   request was received, as used in the &lt;port&gt;
1533   part of the Script-URI.
1534   </P><!--#if expr="! $GUI" -->
1535   <P></P><!--#endif -->
1536   <PRE>
1537     SERVER_PORT = 1*digit
1538   </PRE>
1539   <P>
1540   If the &lt;port&gt; portion of the script-URI is blank, the actual
1541   port number upon which the request was received MUST be supplied.
1542   </P>
1543   <P>
1544   Servers MUST provide this metavariable
1545   to scripts.
1546   </P>
1547
1548   <H4>
1549    <A NAME="6.1.17">
1550     6.1.17. SERVER_PROTOCOL
1551    </A>
1552   </H4>
1553   <P>
1554   The SERVER_PROTOCOL
1555   metavariable
1556   is set to
1557   the
1558   name and revision of the information protocol with which
1559   the
1560   request
1561   arrived.  This is not necessarily the same as the protocol version used by
1562   the server in its response to the client.
1563   </P><!--#if expr="! $GUI" -->
1564   <P></P><!--#endif -->
1565   <PRE>
1566     SERVER_PROTOCOL   = HTTP-Version | extension-version
1567                         | extension-token
1568     HTTP-Version      = "HTTP" "/" 1*digit "." 1*digit
1569     extension-version = protocol "/" 1*digit "." 1*digit
1570     protocol          = 1*( alpha | digit | "+" | "-" | "." )
1571     extension-token   = token
1572   </PRE>
1573   <P>
1574   'protocol' is a version of the &lt;scheme&gt; part of the
1575   Script-URI, but is
1576   not identical to it.  For example, the scheme of a request may be
1577   "<SAMP>https</SAMP>" while the protocol remains "<SAMP>http</SAMP>".
1578   The protocol is not case sensitive, but
1579   by convention, 'protocol' is in
1580   upper case.
1581   </P>
1582   <P>
1583   A well-known extension token value is "INCLUDED",
1584   which signals that the current document is being included as part of
1585   a composite document, rather than being the direct target of the
1586   client request.
1587   </P>
1588   <P>
1589   Servers MUST provide this metavariable
1590   to scripts.
1591   </P>
1592
1593   <H4>
1594    <A NAME="6.1.18">
1595     6.1.18. SERVER_SOFTWARE
1596    </A>
1597   </H4>
1598   <P>
1599   The SERVER_SOFTWARE
1600   metavariable
1601   is set to the
1602   name and version of the information server software answering the
1603   request (and running the gateway).
1604   </P><!--#if expr="! $GUI" -->
1605   <P></P><!--#endif -->
1606   <PRE>
1607     SERVER_SOFTWARE = 1*product
1608     product         = token [ "/" product-version ]
1609     product-version = token
1610   </PRE>
1611   <P>
1612   Servers MUST provide this metavariable
1613   to scripts.
1614   </P>
1615
1616   <H3>
1617    <A NAME="6.2">
1618     6.2. Request Message-Bodies
1619    </A>
1620   </H3>
1621   <P>
1622   As there may be a data entity attached to the request, there MUST be
1623   a system defined method for the script to read
1624   these data. Unless
1625   defined otherwise, this will be <EM>via</EM> the 'standard input' file
1626   descriptor.
1627   </P>
1628   <P>
1629   If the CONTENT_LENGTH value (see <A HREF="#6.1.2">section 6.1.2</A>)
1630   is non-NULL, the server MUST supply at least that many bytes to
1631   scripts on the standard input stream.
1632   Scripts are
1633   not obliged to read the data.
1634   Servers MAY signal an EOF condition after CONTENT_LENGTH bytes have been
1635   read, but are
1636   not obligated to do so.  Therefore, scripts
1637   MUST NOT
1638   attempt to read more than CONTENT_LENGTH bytes, even if more data
1639   are available.
1640   </P>
1641   <P>
1642   For non-parsed header (NPH) scripts (see
1643   <A HREF="#7.1">section 7.1</A>
1644   below),
1645   servers SHOULD
1646   attempt to ensure that the data
1647   supplied to the script are precisely
1648   as supplied by the client and unaltered by
1649   the server.
1650   </P>
1651   <P>
1652   <A HREF="#8.1.2">Section 8.1.2</A> describes the requirements of
1653   servers with regard to requests that include
1654   message-bodies.
1655   </P>
1656
1657   <H2>
1658    <A NAME="7.0">
1659     7. Data Output from the CGI Script
1660    </A>
1661   </H2>
1662   <P>
1663   There MUST be a system defined method for the script to send data
1664   back to the server or client; a script MUST always return some data.
1665   Unless defined otherwise, this will be <EM>via</EM> the 'standard
1666   output' file descriptor.
1667   </P>
1668   <P>
1669   There are two forms of output that  scripts can supply to servers: non-parsed
1670   header (NPH) output, and parsed header output.
1671   Servers MUST support parsed header
1672   output and MAY support NPH output.  The method of
1673   distinguishing between the two
1674   types of output (or scripts) is implementation defined.
1675   </P>
1676   <P>
1677   Servers MAY implement a timeout period within which data must be
1678   received from scripts.  If a server implementation defines such
1679   a timeout and receives no data from a script within the timeout
1680   period, the server MAY terminate the script process and SHOULD
1681   abort the client request with
1682   either a
1683   '504 Gateway Timed Out' or a
1684   '500 Internal Server Error' response.
1685   </P>
1686
1687   <H3>
1688    <A NAME="7.1">
1689     7.1. Non-Parsed Header Output
1690    </A>
1691   </H3>
1692   <P>
1693   Scripts using the NPH output form
1694   MUST return a complete HTTP response message, as described
1695   in Section 6 of the HTTP specifications
1696   [<A HREF="#[3]">3</A>,<A HREF="#[8]">8</A>].
1697    NPH scripts
1698   MUST use the SERVER_PROTOCOL variable to determine the appropriate format
1699   for a response.
1700   </P>
1701   <P>
1702   Servers
1703   SHOULD attempt to ensure that the script output is sent
1704   directly to the client, with minimal
1705   internal and no transport-visible
1706   buffering.
1707   </P>
1708
1709   <H3>
1710    <A NAME="7.2">
1711     7.2. Parsed Header Output
1712    </A>
1713   </H3>
1714   <P>
1715   Scripts using the parsed header output form MUST supply
1716   a CGI response message to the server
1717   as follows:
1718   </P><!--#if expr="! $GUI" -->
1719   <P></P><!--#endif -->
1720   <PRE>
1721     CGI-Response   = *optional-field CGI-Field *optional-field NL [ Message-Body ]
1722     optional-field = ( CGI-Field | HTTP-Field )
1723     CGI-Field      = Content-type
1724                    | Location
1725                    | Status
1726                    | extension-header
1727   </PRE>
1728   <P><!-- ##### If HTTP defines x-headers, remove ours except x-cgi- -->
1729   The response comprises a header and a body, separated by a blank line.
1730   The body may be NULL.
1731   The header fields are either CGI header fields to be interpreted by
1732   the server, or HTTP header fields
1733   to be included in the response returned
1734   to the client
1735   if the request method is HTTP. At least one
1736   CGI-Field MUST be
1737   supplied, but no CGI  field name may be used more than once
1738   in a response.
1739   If a body is supplied, then a "<SAMP>Content-type</SAMP>"
1740   header field MUST be
1741   supplied by the script,
1742   otherwise the script MUST send a "<SAMP>Location</SAMP>"
1743   or "<SAMP>Status</SAMP>" header field. If a
1744   <SAMP>Location</SAMP> CGI-Field
1745   is returned, then the script MUST NOT supply
1746   any HTTP-Fields.
1747   </P>
1748   <P>
1749   Each header field in a CGI-Response MUST be specified on a single line;
1750   CGI/1.1 does not support continuation lines.
1751   </P>
1752
1753   <H4>
1754    <A NAME="7.2.1">
1755     7.2.1. CGI header fields
1756    </A>
1757   </H4>
1758   <P>
1759   The CGI header fields have the generic syntax:
1760   </P><!--#if expr="! $GUI" -->
1761   <P></P><!--#endif -->
1762   <PRE>
1763     generic-field  = field-name ":" [ field-value ] NL
1764     field-name     = token
1765     field-value    = *( field-content | LWSP )
1766     field-content  = *( token | tspecial | quoted-string )
1767   </PRE>
1768   <P>
1769   The field-name is not case sensitive; a NULL field value is
1770   equivalent to the header field not being sent.
1771   </P>
1772
1773   <H4>
1774    <A NAME="7.2.1.1">
1775     7.2.1.1. Content-Type
1776    </A>
1777   </H4>
1778   <P>
1779   The Internet Media Type [<A HREF="#[9]">9</A>] of the entity
1780   body, which is to be sent unmodified to the client.
1781   </P><!--#if expr="! $GUI" -->
1782   <P></P><!--#endif -->
1783   <PRE>
1784     Content-Type = "Content-Type" ":" media-type NL
1785   </PRE>
1786   <P>
1787   This is actually an HTTP-Field
1788   rather than a CGI-Field, but
1789   it is listed here because of its importance in the CGI dialogue as
1790   a member of the "one of these is required" set of header
1791   fields.
1792   </P>
1793
1794   <H4>
1795    <A NAME="7.2.1.2">
1796     7.2.1.2. Location
1797    </A>
1798   </H4>
1799   <P>
1800   This is used to specify to the server that the script is returning a
1801   reference to a document rather than an actual document.
1802   </P><!--#if expr="! $GUI" -->
1803   <P></P><!--#endif -->
1804   <PRE>
1805     Location         = "Location" ":"
1806                        ( fragment-URI | rel-URL-abs-path ) NL
1807     fragment-URI     = URI [ # fragmentid ]
1808     URI              = scheme ":" *qchar
1809     fragmentid       = *qchar
1810     rel-URL-abs-path = "/" [ hpath ] [ "?" query-string ]
1811     hpath            = fpsegment *( "/" psegment )
1812     fpsegment        = 1*hchar
1813     psegment         = *hchar
1814     hchar            = alpha | digit | safe | extra
1815                        | ":" | "@" | "& | "="
1816   </PRE>
1817   <P>
1818   The Location
1819   value is either an absolute URI with optional fragment,
1820   as defined in RFC 1630 [<A HREF="#[1]">1</A>], or an absolute path
1821   within the server's URI space (<EM>i.e.</EM>,
1822   omitting the scheme and network-related fields) and optional
1823   query-string. If an absolute URI is returned by the script,
1824   then the
1825   server MUST generate a
1826   '302 redirect' HTTP response
1827   message unless the script has supplied an
1828   explicit Status response header field.
1829   Scripts returning an absolute URI MAY choose to
1830   provide a message-body.  Servers MUST make any appropriate modifications
1831   to the script's output to ensure the response to the user-agent complies
1832   with the response protocol version.
1833   If the Location value is a path, then the server
1834   MUST generate
1835   the response that it would have produced in response to a request
1836   containing the URL
1837   </P><!--#if expr="! $GUI" -->
1838   <P></P><!--#endif -->
1839   <PRE>
1840     scheme "://" SERVER_NAME ":" SERVER_PORT rel-URL-abs-path
1841   </PRE>
1842   <P>
1843   Note: If the request was accompanied by a
1844   message-body
1845   (such as for a POST request), and the script
1846   redirects the request with a Location field, the
1847   message-body
1848   may not be
1849   available to the resource that is the target of the redirect.
1850   </P>
1851
1852   <H4>
1853    <A NAME="7.2.1.3">
1854     7.2.1.3. Status
1855    </A>
1856   </H4>
1857   <P>
1858   The "<SAMP>Status</SAMP>" header field is used to indicate to the server what
1859   status code the server MUST use in the response message.
1860   </P><!--#if expr="! $GUI" -->
1861   <P></P><!--#endif -->
1862   <PRE>
1863     Status        = "Status" ":" digit digit digit SP reason-phrase NL
1864     reason-phrase = *&lt;CHAR, excluding CTLs, NL&gt;
1865   </PRE>
1866   <P>
1867   The valid status codes are listed in section 6.1.1 of the HTTP/1.0
1868   specifications [<A HREF="#[3]">3</A>]. If the SERVER_PROTOCOL is
1869   "HTTP/1.1", then the status codes defined in the HTTP/1.1
1870   specification [<A HREF="#[8]">8</A>] may
1871   be used. If the script does not return a "<SAMP>Status</SAMP>" header
1872   field, then "200 OK" SHOULD be assumed by the server.
1873   </P>
1874   <P>
1875   If a script is being used to handle a particular error or condition
1876   encountered by the server, such as a '404 Not Found' error, the script
1877   SHOULD use the "<SAMP>Status</SAMP>" CGI header field to propagate the error
1878   condition back to the client.  <EM>E.g.</EM>, in the example mentioned it
1879   SHOULD include a "Status:&nbsp;404&nbsp;Not&nbsp;Found" in the
1880   header data returned to the server.
1881   </P>
1882
1883   <H4>
1884    <A NAME="7.2.1.4">
1885     7.2.1.4. Extension header fields
1886    </A>
1887   </H4>
1888   <P>
1889   Scripts MAY include in their CGI response header additional fields
1890   not defined in this or the HTTP specification.
1891   These are called "extension" fields,
1892   and have the syntax of a <SAMP>generic-field</SAMP> as defined in
1893   <A HREF="#7.2.1">section 7.2.1</A>.  The name of an extension field
1894   MUST NOT conflict with a field name defined in this or any other
1895   specification; extension field names SHOULD begin with "X-CGI-"
1896   to ensure uniqueness.
1897   </P>
1898
1899   <H4>
1900    <A NAME="7.2.2">
1901     7.2.2. HTTP header fields
1902    </A>
1903   </H4>
1904   <P>
1905   The script MAY return any other header fields defined by the
1906   specification
1907   for the SERVER_PROTOCOL (HTTP/1.0 [<A HREF="#[3]">3</A>] or HTTP/1.1
1908   [<A HREF="#[8]">8</A>]).
1909   Servers MUST resolve conflicts beteen CGI header
1910   and HTTP header formats or names (see <A HREF="#8.0">section 8</A>).
1911   </P>
1912
1913   <H2>
1914    <A NAME="8.0">
1915     8. Server Implementation
1916    </A>
1917   </H2>
1918   <P>
1919   This section defines the requirements that must be met by HTTP
1920   servers in order to provide a coherent and correct CGI/1.1
1921   environment in which scripts may function.  It is intended
1922   primarily for server implementors, but it is useful for
1923   script authors to be familiar with the information as well.
1924   </P>
1925
1926   <H3>
1927    <A NAME="8.1">
1928     8.1. Requirements for Servers
1929    </A>
1930   </H3>
1931   <P>
1932   In order to be considered CGI/1.1-compliant, a server must meet
1933   certain basic criteria and provide certain minimal functionality.
1934   The details of these requirements are described in the following sections.
1935   </P>
1936
1937   <H3>
1938    <A NAME="8.1.1">
1939     8.1.1. Script-URI
1940    </A>
1941   </H3>
1942   <P>
1943   Servers MUST support the standard mechanism (described below) which
1944   allows
1945   script authors to determine
1946   what URL to use in documents
1947   which reference the script;
1948   specifically, what URL to use in order to
1949   achieve particular settings of the
1950   metavariables. This
1951   mechanism is as follows:
1952   </P>
1953   <P>
1954   The server
1955   MUST translate the header data from the CGI header field syntax to
1956   the HTTP
1957   header field syntax if these differ. For example, the character
1958   sequence for
1959   newline (such as Unix's ASCII NL) used by CGI scripts may not be the
1960   same as that used by HTTP (ASCII CR followed by LF). The server MUST
1961   also resolve any conflicts between header fields returned by the script
1962   and header fields that it would otherwise send itself.
1963   </P>
1964
1965   <H3>
1966    <A NAME="8.1.2">
1967     8.1.2. Request Message-body Handling
1968    </A>
1969   </H3>
1970   <P>
1971   These are the requirements for server handling of message-bodies directed
1972   to CGI/1.1 resources:
1973   </P>
1974   <OL>
1975    <LI>The message-body the server provides to the CGI script MUST
1976     have any transfer encodings removed.
1977    </LI>
1978    <LI>The server MUST derive and provide a value for the CONTENT_LENGTH
1979     metavariable that reflects the length of the message-body after any
1980     transfer decoding.
1981    </LI>
1982    <LI>The server MUST leave intact any content-encodings of the message-body.
1983    </LI>
1984   </OL>
1985
1986   <H3>
1987    <A NAME="8.1.3">
1988     8.1.3. Required Metavariables
1989    </A>
1990   </H3>
1991   <P>
1992   Servers MUST provide scripts with certain information and
1993   metavariables
1994   as described in <A HREF="#8.3">section 8.3</A>.
1995   </P>
1996
1997   <H3>
1998    <A NAME="8.1.4">
1999     8.1.4. Response Compliance
2000    </A>
2001   </H3>
2002   <P>
2003   Servers MUST ensure that responses sent to the user-agent meet all
2004   requirements of the protocol level in effect.  This may involve
2005   modifying, deleting, or augmenting any header
2006   fields and/or message-body supplied by the script.
2007   </P>
2008
2009   <H3>
2010    <A NAME="8.2">
2011     8.2. Recommendations for Servers
2012    </A>
2013   </H3>
2014   <P>
2015   Servers SHOULD provide the "<SAMP>query</SAMP>" component of the script-URI
2016   as command-line arguments to scripts if it does not
2017   contain any unencoded '=' characters and the command-line arguments can
2018   be generated in an unambiguous manner.
2019   (See <A HREF="#5.0">section 5</A>.)
2020   </P>
2021   <P>
2022   Servers SHOULD set the AUTH_TYPE
2023   metavariable to the value of the
2024   '<SAMP>auth-scheme</SAMP>' token of the "<SAMP>Authorization</SAMP>"
2025   field if it was supplied as part of the request header.
2026   (See <A HREF="#6.1.1">section 6.1.1</A>.)
2027   </P>
2028   <P>
2029   Where applicable, servers SHOULD set the current working directory
2030   to the directory in which the script is located before invoking
2031   it.
2032   </P>
2033   <P>
2034   Servers MAY reject with error '404 Not Found'
2035   any requests that would result in
2036   an encoded "/" being decoded into PATH_INFO or SCRIPT_NAME, as this
2037   might represent a loss of information to the script.
2038   </P>
2039   <P>
2040   Although the server and the CGI script need not be consistent in
2041   their handling of URL paths (client URLs and the PATH_INFO data,
2042   respectively), server authors may wish to impose consistency.
2043   So the server implementation SHOULD define its behaviour for the
2044   following cases:
2045   </P>
2046   <OL>
2047    <LI>define any restrictions on allowed characters, in particular
2048     whether ASCII NUL is permitted;
2049    </LI>
2050    <LI>define any restrictions on allowed path segments, in particular
2051     whether non-terminal NULL segments are permitted;
2052    </LI>
2053    <LI>define the behaviour for <SAMP>"."</SAMP> or <SAMP>".."</SAMP> path
2054     segments; <EM>i.e.</EM>, whether they are prohibited, treated as
2055     ordinary path
2056     segments or interpreted in accordance with the relative URL
2057     specification [<A HREF="#[7]">7</A>];
2058    </LI>
2059    <LI>define any limits of the implementation, including limits on path or
2060     search string lengths, and limits on the volume of header data the server
2061     will parse.
2062    </LI><!-- ##### Move the field resolution/translation para below here -->
2063   </OL>
2064   <P>
2065   Servers MAY generate the
2066   Script-URI in
2067   any way from the client URI,
2068   or from any other data (but the behaviour SHOULD be documented).
2069   </P>
2070   <P>
2071   For non-parsed header (NPH) scripts (see
2072   <A HREF="#7.1">section 7.1</A>), servers SHOULD
2073   attempt to ensure that the script input comes directly from the
2074   client, with minimal buffering. For all scripts the data will be
2075   as supplied by the client.
2076   </P>
2077
2078   <H3>
2079    <A NAME="8.3">
2080     8.3. Summary of
2081     MetaVariables
2082    </A>
2083   </H3>
2084   <P>
2085   Servers MUST provide the following
2086   metavariables to
2087   scripts.  See the individual descriptions for exceptions and semantics.
2088   </P><!--#if expr="! $GUI" -->
2089   <P></P><!--#endif -->
2090   <PRE>
2091     CONTENT_LENGTH (section <A HREF="#6.1.2">6.1.2</A>)
2092     CONTENT_TYPE (section <A HREF="#6.1.3">6.1.3</A>)
2093     GATEWAY_INTERFACE (section <A HREF="#6.1.4">6.1.4</A>)
2094     PATH_INFO (section <A HREF="#6.1.6">6.1.6</A>)
2095     QUERY_STRING (section <A HREF="#6.1.8">6.1.8</A>)
2096     REMOTE_ADDR (section <A HREF="#6.1.9">6.1.9</A>)
2097     REQUEST_METHOD (section <A HREF="#6.1.13">6.1.13</A>)
2098     SCRIPT_NAME (section <A HREF="#6.1.14">6.1.14</A>)
2099     SERVER_NAME (section <A HREF="#6.1.15">6.1.15</A>)
2100     SERVER_PORT (section <A HREF="#6.1.16">6.1.16</A>)
2101     SERVER_PROTOCOL (section <A HREF="#6.1.17">6.1.17</A>)
2102     SERVER_SOFTWARE (section <A HREF="#6.1.18">6.1.18</A>)
2103   </PRE>
2104   <P>
2105   Servers SHOULD define the following
2106   metavariables for scripts.
2107   See the individual descriptions for exceptions and semantics.
2108   </P><!--#if expr="! $GUI" -->
2109   <P></P><!--#endif -->
2110   <PRE>
2111     AUTH_TYPE (section <A HREF="#6.1.1">6.1.1</A>)
2112     REMOTE_HOST (section <A HREF="#6.1.10">6.1.10</A>)
2113   </PRE>
2114   <P>
2115   In addition, servers SHOULD provide
2116   metavariables for all fields present
2117   in the HTTP request header, with the exception of those involved with
2118   access control.  Servers MAY at their discretion provide
2119   metavariables
2120   for access control fields.
2121   </P>
2122   <P>
2123   Servers MAY define the following
2124   metavariables.  See the individual
2125   descriptions for exceptions and semantics.
2126   </P><!--#if expr="! $GUI" -->
2127   <P></P><!--#endif -->
2128   <PRE>
2129     PATH_TRANSLATED (section <A HREF="#6.1.7">6.1.7</A>)
2130     REMOTE_IDENT (section <A HREF="#6.1.11">6.1.11</A>)
2131     REMOTE_USER (section <A HREF="#6.1.12">6.1.12</A>)
2132   </PRE>
2133   <P>
2134   Servers MAY
2135   at their discretion define additional implementation-specific
2136   extension metavariables
2137   provided their names do not
2138   conflict with defined header field names.  Implementation-specific
2139   metavariable names SHOULD
2140   be prefixed with "X_" (<EM>e.g.</EM>,
2141   "X_DBA") to avoid the potential for such conflicts.
2142   </P>
2143
2144   <H2>
2145    <A NAME="9.0">
2146     9.
2147     Script Implementation
2148    </A>
2149   </H2>
2150   <P>
2151   This section defines the requirements and recommendations for scripts
2152   that are intended to function in a CGI/1.1 environment.  It is intended
2153   primarily as a reference for script authors, but server implementors
2154   should be familiar with these issues as well.
2155   </P>
2156
2157   <H3>
2158    <A NAME="9.1">
2159     9.1. Requirements for Scripts
2160    </A>
2161   </H3>
2162   <P>
2163   Scripts using the parsed-header method to communicate with servers
2164   MUST supply a response header to the server.
2165   (See <A HREF="#7.0">section 7</A>.)
2166   </P>
2167   <P>
2168   Scripts using the NPH method to communicate with servers MUST
2169   provide complete HTTP responses, and MUST use the value of the
2170   SERVER_PROTOCOL metavariable
2171   to determine the appropriate format.
2172   (See <A HREF="#7.1">section 7.1</A>.)
2173   </P>
2174   <P>
2175   Scripts MUST check the value of the REQUEST_METHOD
2176   metavariable in order
2177   to provide an appropriate response.
2178   (See <A HREF="#6.1.13">section 6.1.13</A>.)
2179   </P>
2180   <P>
2181   Scripts MUST be prepared to handled URL-encoded values in
2182   metavariables.
2183   In addition, they MUST recognise both "+" and "%20" in URL-encoded
2184   quantities as representing the space character.
2185   (See <A HREF="#3.1">section 3.1</A>.)
2186   </P>
2187   <P>
2188   Scripts MUST ignore leading zeros in the major and minor version numbers
2189   in the GATEWAY_INTERFACE
2190   metavariable value. (See
2191   <A HREF="#6.1.4">section 6.1.4</A>.)
2192   </P>
2193   <P>
2194   When processing requests that include a
2195   message-body, scripts
2196   MUST NOT read more than CONTENT_LENGTH bytes from the input stream.
2197   (See sections <A HREF="#6.1.2">6.1.2</A> and <A HREF="#6.2">6.2</A>.)
2198   </P>
2199
2200   <H3>
2201    <A NAME="9.2">
2202     9.2. Recommendations for Scripts
2203    </A>
2204   </H3>
2205   <P>
2206   Servers may interrupt or terminate script execution at any time
2207   and without warning, so scripts SHOULD be prepared to deal with
2208   abnormal termination.
2209   </P>
2210   <P>
2211   Scripts MUST
2212   reject with
2213   error '405 Method Not
2214   Allowed' requests
2215   made using methods that they do not support. If the script does
2216   not intend
2217   processing the PATH_INFO data, then it SHOULD reject the request with
2218   '404 Not
2219   Found' if PATH_INFO is not NULL.
2220   </P>
2221   <P>
2222   If a script is processing the output of a form, it SHOULD
2223   verify that the CONTENT_TYPE
2224   is "<SAMP>application/x-www-form-urlencoded</SAMP>" [<A HREF="#[2]">2</A>]
2225   or whatever other media type is expected.
2226   </P>
2227   <P>
2228   Scripts parsing PATH_INFO,
2229   PATH_TRANSLATED, or SCRIPT_NAME
2230   SHOULD be careful
2231   of void path segments ("<SAMP>//</SAMP>") and special path segments
2232   (<SAMP>"."</SAMP> and
2233   <SAMP>".."</SAMP>). They SHOULD either be removed from the path before
2234   use in OS
2235   system calls, or the request SHOULD be rejected with
2236   '404 Not Found'.
2237   </P>
2238   <P>
2239   As it is impossible for
2240   scripts to determine the client URI that
2241   initiated  a
2242   request without knowledge of the specific server in
2243   use, the script SHOULD NOT return "<SAMP>text/html</SAMP>"
2244   documents containing
2245   relative URL links without including a "<SAMP>&lt;BASE&gt;</SAMP>"
2246   tag in the document.
2247   </P>
2248   <P>
2249   When returning header fields,
2250   scripts SHOULD try to send the CGI
2251   header fields (see section
2252   <A HREF="#7.2">7.2</A>) as soon as possible, and
2253   SHOULD send them
2254   before any HTTP header fields. This may
2255   help reduce the server's memory requirements.
2256   </P>
2257
2258   <H2>
2259    <A NAME="10.0">
2260     10. System Specifications
2261    </A>
2262   </H2>
2263
2264   <H3>
2265    <A NAME="10.1">
2266     10.1. AmigaDOS
2267    </A>
2268   </H3>
2269   <P>
2270   The implementation of the CGI on an AmigaDOS operating system platform
2271   SHOULD use environment variables as the mechanism of providing
2272   request metadata to CGI scripts.
2273   </P>
2274   <DL>
2275    <DT><STRONG>Environment variables</STRONG>
2276    </DT>
2277    <DD>
2278     <P>
2279     These are accessed by the DOS library routine <SAMP>GetVar</SAMP>. The
2280     flags argument SHOULD be 0. Case is ignored, but upper case is
2281     recommended for compatibility with case-sensitive systems.
2282     </P>
2283    </DD>
2284    <DT><STRONG>The current working directory</STRONG>
2285    </DT>
2286    <DD>
2287     <P>
2288     The current working directory for the script is set to the directory
2289     containing the script.
2290     </P>
2291    </DD>
2292    <DT><STRONG>Character set</STRONG>
2293    </DT>
2294    <DD>
2295     <P>
2296     The US-ASCII character set is used for the definition of environment
2297     variable names and header
2298     field names; the newline (NL) sequence is LF;
2299     servers SHOULD also accept CR LF as a newline.
2300     </P>
2301    </DD>
2302   </DL>
2303
2304   <H3>
2305    <A NAME="10.2">
2306     10.2. Unix
2307    </A>
2308   </H3>
2309   <P>
2310   The implementation of the CGI on a UNIX operating system platform
2311   SHOULD use environment variables as the mechanism of providing
2312   request metadata to CGI scripts.
2313   </P>
2314   <P>
2315   For Unix compatible operating systems, the following are defined:
2316   </P>
2317   <DL>
2318    <DT><STRONG>Environment variables</STRONG>
2319    </DT>
2320    <DD>
2321     <P>
2322     These are accessed by the C library routine <SAMP>getenv</SAMP>.
2323     </P>
2324    </DD>
2325    <DT><STRONG>The command line</STRONG>
2326    </DT>
2327    <DD>
2328     <P>
2329     This is accessed using the
2330     <SAMP>argc</SAMP> and <SAMP>argv</SAMP>
2331     arguments to <SAMP>main()</SAMP>. The words have any characters
2332     that
2333     are 'active' in the Bourne shell escaped with a backslash.
2334     If the value of the QUERY_STRING
2335     metavariable
2336     contains an unencoded equals-sign '=', then the command line
2337     SHOULD NOT be used by the script.
2338     </P>
2339    </DD>
2340    <DT><STRONG>The current working directory</STRONG>
2341    </DT>
2342    <DD>
2343     <P>
2344     The current working directory for the script
2345     SHOULD be set to the directory
2346     containing the script.
2347     </P>
2348    </DD>
2349    <DT><STRONG>Character set</STRONG>
2350    </DT>
2351    <DD>
2352     <P>
2353     The US-ASCII character set is used for the definition of environment
2354     variable names and header field names; the newline (NL) sequence is LF;
2355     servers SHOULD also accept CR LF as a newline.
2356     </P>
2357    </DD>
2358   </DL>
2359
2360   <H2>
2361    <A NAME="11.0">
2362     11. Security Considerations
2363    </A>
2364   </H2>
2365
2366   <H3>
2367    <A NAME="11.1">
2368     11.1. Safe Methods
2369    </A>
2370   </H3>
2371   <P>
2372   As discussed in the security considerations of the HTTP
2373   specifications [<A HREF="#[3]">3</A>,<A HREF="#[8]">8</A>], the
2374   convention has been established that the
2375   GET and HEAD methods should be 'safe'; they should cause no
2376   side-effects and only have the significance of resource retrieval.
2377   </P>
2378   <P>
2379   CGI scripts are responsible for enforcing any HTTP security considerations
2380   [<A HREF="#[3]">3</A>,<A HREF="#[8]">8</A>]
2381   with respect to the protocol version level of the request and
2382   any side effects generated by the scripts on behalf of
2383   the server.  Primary
2384   among these
2385   are the considerations of safe and idempotent methods.  Idempotent
2386   requests are those that may be repeated an arbitrary number of times
2387   and produce side effects identical to a single request.
2388   </P>
2389
2390   <H3>
2391    <A NAME="11.2">
2392     11.2. HTTP Header
2393     Fields Containing Sensitive Information
2394    </A>
2395   </H3>
2396   <P>
2397   Some HTTP header fields may carry sensitive information which the server
2398   SHOULD NOT pass on to the script unless explicitly configured to do
2399   so. For example, if the server protects the script using the
2400   "<SAMP>Basic</SAMP>"
2401   authentication scheme, then the client will send an
2402   "<SAMP>Authorization</SAMP>"
2403   header field containing a username and password. If the server, rather
2404   than the script, validates this information then the password SHOULD
2405   NOT be passed on to the script <EM>via</EM> the HTTP_AUTHORIZATION
2406   metavariable
2407   without careful consideration.
2408   This also applies to the
2409   Proxy-Authorization header field and the corresponding
2410   HTTP_PROXY_AUTHORIZATION
2411   metavariable.
2412   </P>
2413
2414   <H3>
2415    <A NAME="11.3">
2416     11.3. Script
2417     Interference with the Server
2418    </A>
2419   </H3>
2420   <P>
2421   The most common implementation of CGI invokes the script as a child
2422   process using the same user and group as the server process. It
2423   SHOULD therefore be ensured that the script cannot interfere with the
2424   server process, its configuration, or documents.
2425   </P>
2426   <P>
2427   If the script is executed by calling a function linked in to the
2428   server software (either at compile-time or run-time) then precautions
2429   SHOULD be taken to protect the core memory of the server, or to
2430   ensure that untrusted code cannot be executed.
2431   </P>
2432
2433   <H3>
2434    <A NAME="11.4">
2435     11.4. Data Length and Buffering Considerations
2436    </A>
2437   </H3>
2438   <P>
2439   This specification places no limits on the length of message-bodies
2440   presented to the script.  Scripts should not assume that statically
2441   allocated buffers of any size are sufficient to contain the entire
2442   submission at one time.  Use of a fixed length buffer without careful
2443   overflow checking may result in an attacker exploiting 'stack-smashing'
2444   or 'stack-overflow' vulnerabilities of the operating system.
2445   Scripts may spool large submissions to disk or other buffering media,
2446   but a rapid succession of large submissions may result in denial of
2447   service conditions.  If the CONTENT_LENGTH of a message-body is larger
2448   than resource considerations allow, scripts should respond with an
2449   error status appropriate for the protocol version; potentially applicable
2450   status codes include '503 Service Unavailable' (HTTP/1.0 and HTTP/1.1),
2451   '413 Request Entity Too Large' (HTTP/1.1), and
2452   '414 Request-URI Too Long' (HTTP/1.1).
2453   </P>
2454
2455   <H3>
2456    <A NAME="11.5">
2457     11.5. Stateless Processing
2458    </A>
2459   </H3>
2460   <P>
2461   The stateless nature of the Web makes each script execution and resource
2462   retrieval independent of all others even when multiple requests constitute a
2463   single conceptual Web transaction.  Because of this, a script should not
2464   make any assumptions about the context of the user-agent submitting a
2465   request.  In particular, scripts should examine data obtained from the client
2466   and verify that they are valid, both in form and content, before allowing
2467   them to be used for sensitive purposes such as input to other
2468   applications, commands, or operating system services.  These uses
2469   include, but are not
2470   limited to: system call arguments, database writes, dynamically evaluated
2471   source code, and input to billing or other secure processes.  It is important
2472   that applications be protected from invalid input regardless of whether
2473   the invalidity is the result of user error, logic error, or malicious action.
2474   </P>
2475   <P>
2476   Authors of scripts involved in multi-request transactions should be
2477   particularly cautios about validating the state information;
2478   undesirable effects may result from the substitution of dangerous
2479   values for portions of the submission which might otherwise be
2480   presumed safe.  Subversion of this type occurs when alterations
2481   are made to data from a prior stage of the transaction that were
2482   not meant to be controlled by the client (<EM>e.g.</EM>, hidden
2483   HTML form elements, cookies, embedded URLs, <EM>etc.</EM>).
2484   </P>
2485
2486   <H2>
2487    <A NAME="12.0">
2488     12. Acknowledgements
2489    </A>
2490   </H2>
2491   <P>
2492   This work is based on a draft published in 1997 by David R. Robinson,
2493   which in turn was based on the original CGI interface that arose out of
2494   discussions on the <EM>www-talk</EM> mailing list. In particular,
2495   Rob McCool, John Franks, Ari Luotonen,
2496   George Phillips and
2497   Tony Sanders deserve special recognition for their efforts in
2498   defining and implementing the early versions of this interface.
2499   </P>
2500   <P>
2501   This document has also greatly benefited from the comments and
2502   suggestions made by  Chris Adie, Dave Kristol,
2503   Mike Meyer, David Morris, Jeremy Madea,
2504   Patrick M<SUP>c</SUP>Manus, Adam Donahue,
2505   Ross Patterson, and Harald Alvestrand.
2506   </P>
2507
2508   <H2>
2509    <A NAME="13.0">
2510     13. References
2511    </A>
2512   </H2>
2513   <DL COMPACT>
2514    <DT><A NAME="[1]">[1]</A>
2515    </DT>
2516    <DD>Berners-Lee, T., 'Universal Resource Identifiers in WWW: A
2517        Unifying Syntax for the Expression of Names and Addresses of
2518        Objects on the Network as used in the World-Wide Web', RFC 1630,
2519        CERN, June 1994.
2520        <P>
2521        </P>
2522    </DD>
2523    <DT><A NAME="[2]">[2]</A>
2524    </DT>
2525    <DD>Berners-Lee, T. and Connolly, D., 'Hypertext Markup Language -
2526         2.0', RFC 1866, MIT/W3C, November 1995.
2527        <P>
2528        </P>
2529    </DD>
2530    <DT><A NAME="[3]">[3]</A>
2531    </DT>
2532    <DD>Berners-Lee, T., Fielding, R. T. and Frystyk, H.,
2533           'Hypertext Transfer Protocol -- HTTP/1.0', RFC 1945, MIT/LCS,
2534           UC Irvine, May 1996.
2535        <P>
2536        </P>
2537    </DD>
2538
2539   <DT><A NAME="[4]">[4]</A>
2540   </DT>
2541   <DD>Berners-Lee, T., Fielding, R., and Masinter, L., Editors,
2542    'Uniform Resource Identifiers (URI): Generic Syntax', RFC 2396,
2543    MIT, U.C. Irvine, Xerox Corporation, August 1996.
2544    <P>
2545    </P>
2546   </DD>
2547
2548   <DT><A NAME="[5]">[5]</A>
2549   </DT>
2550   <DD>Braden, R., Editor, 'Requirements for Internet Hosts --
2551           Application and Support', STD 3, RFC 1123, IETF, October 1989.
2552        <P>
2553        </P>
2554    </DD>
2555    <DT><A NAME="[6]">[6]</A>
2556    </DT>
2557    <DD>Crocker, D.H., 'Standard for the Format of ARPA Internet Text
2558           Messages', STD 11, RFC 822, University of Delaware, August 1982.
2559        <P>
2560        </P>
2561    </DD>
2562   <DT><A NAME="[7]">[7]</A>
2563   </DT>
2564   <DD>Fielding, R., 'Relative Uniform Resource Locators', RFC 1808,
2565           UC Irvine, June 1995.
2566        <P>
2567        </P>
2568    </DD>
2569    <DT><A NAME="[8]">[8]</A>
2570    </DT>
2571    <DD>Fielding, R., Gettys, J., Mogul, J., Frystyk, H. and
2572           Berners-Lee, T., 'Hypertext Transfer Protocol -- HTTP/1.1',
2573           RFC 2068, UC Irvine, DEC,
2574           MIT/LCS, January 1997.
2575        <P>
2576        </P>
2577    </DD>
2578    <DT><A NAME="[9]">[9]</A>
2579    </DT>
2580    <DD>Freed, N. and Borenstein N., 'Multipurpose Internet Mail
2581           Extensions (MIME) Part Two: Media Types', RFC 2046, Innosoft,
2582           First Virtual, November 1996.
2583        <P>
2584        </P>
2585    </DD>
2586    <DT><A NAME="[10]">[10]</A>
2587    </DT>
2588    <DD>Mockapetris, P., 'Domain Names - Concepts and Facilities',
2589           STD 13, RFC 1034, ISI, November 1987.
2590        <P>
2591        </P>
2592    </DD>
2593    <DT><A NAME="[11]">[11]</A>
2594    </DT>
2595    <DD>St. Johns, M., 'Identification Protocol', RFC 1431, US
2596           Department of Defense, February 1993.
2597        <P>
2598        </P>
2599    </DD>
2600    <DT><A NAME="[12]">[12]</A>
2601    </DT>
2602    <DD>'Coded Character Set -- 7-bit American Standard Code for
2603           Information Interchange', ANSI X3.4-1986.
2604        <P>
2605        </P>
2606    </DD>
2607    <DT><A NAME="[13]">[13]</A>
2608    </DT>
2609    <DD>Hinden, R. and Deering, S.,
2610           'IP Version 6 Addressing Architecture', RFC 2373,
2611           Nokia, Cisco Systems,
2612           July 1998.
2613        <P>
2614        </P>
2615    </DD>
2616   </DL>
2617
2618   <H2>
2619    <A NAME="14.0">
2620     14. Authors' Addresses
2621    </A>
2622   </H2>
2623   <ADDRESS>
2624    <P>
2625    Ken A L Coar
2626    <BR>
2627    MeepZor Consulting
2628    <BR>
2629    7824 Mayfaire Crest Lane, Suite 202
2630    <BR>
2631    Raleigh, NC   27615-4875
2632    <BR>
2633    U.S.A.
2634    </P>
2635    <P>
2636    Tel: +1 (919) 254.4237
2637    <BR>
2638    Fax: +1 (919) 254.5250
2639    <BR>
2640    Email:
2641    <A
2642     HREF="mailto:Ken.Coar@Golux.Com"
2643    ><SAMP>Ken.Coar@Golux.Com</SAMP></A>
2644    </P>
2645   </ADDRESS>
2646   <ADDRESS>
2647    <P>
2648    David Robinson
2649    <BR>
2650    E*TRADE UK Ltd
2651    <BR>
2652    Mount Pleasant House
2653    <BR>
2654    2 Mount Pleasant
2655    <BR>
2656    Huntingdon Road
2657    <BR>
2658    Cambridge CB3 0RN
2659    <BR>
2660    UK
2661    </P>
2662    <P>
2663    Tel: +44 (1223) 566926
2664    <BR>
2665    Fax: +44 (1223) 506288
2666    <BR>
2667    Email:
2668    <A
2669     HREF="mailto:drtr@etrade.co.uk"
2670    ><SAMP>drtr@etrade.co.uk</SAMP></A>
2671   </ADDRESS>
2672
2673  </BODY>
2674 </HTML>