This page has been robot translated, sorry for typos if any. Original content here.

Tout sur CGI (Common Gateway Interface)

Qu'est-ce que CGI?

Dès le début, nous allons comprendre la terminologie. CGI - Commom Gateway Interface est une interface qui permet à un serveur Web de lancer des programmes à sa demande à partir du navigateur, ainsi que de donner le résultat de leur travail au navigateur. Le programme CGI (script) est un programme (script) exécuté sur le serveur qui communique également avec le navigateur via l'interface ci-dessus. Comme il n'y a pas de réglementation stricte sur les définitions de termes, il s'agit très souvent, en parlant de CGI , du programme (script), mais pas de l'interface elle-même.

S'il s'agit d'un programme, il doit posséder tout format exécutable acceptable pour un système d'exploitation particulier. Les programmes sont autorisés à gribouiller sur n'importe quoi: C / C ++, Pascal, Java, Visual est aussi juste de base, delphi, etc.

Si ce script (script), puis sur le système d'exploitation sous lequel le serveur web tourne, il doit y avoir un interpréteur de script correspondant: shell, perl, tcl / tk, command.com, etc.

La principale raison pour laquelle l'outil de développement du programme CGI (script) répond aux besoins suivants: - permettre de parler à partir du flux d'entrée standard (stdin) - pour acquérir les valeurs des variables d'environnement - à inclure dans le flux stdout standard

Pour ce qui est utilisé CGI:

  • Travailler avec les systèmes d'aide est également une base de données.
  • La création de documents HTML dynamiques est également une ressource (y compris les compteurs, les livres d'or, etc.)
  • Administration à distance de divers systèmes.
  • Il suffit de travailler avec différents programmes, car l'interface HTML est assez facile à utiliser, facile à fabriquer est également agréable :)

Le mécanisme de travail des programmes CGI

Comme déjà mentionné, CGI acquiert des données d'entrée à partir du flux d'entrée stdin standard, ou à partir de variables d'environnement, mais fournit les résultats de son travail au flux de sortie standard stdout . Pour ceux-là. qui ne sait pas ce que c'est: Flux d'entrée standard (stdin) - d'où le programme (script) par défaut acquiert des informations d'entrée. Habituellement, il s'agit d'un clavier, mais il peut être réaffecté, et le programme (script) va acquérir des données d'entrée à partir d'un fichier, une socket, le flux de sortie d'un autre programme.

Les variables d'environnement sont des variables définies pour le système également du serveur sur lequel le CGI sera exécuté. .

Flux de sortie standard (stdout) - ici, le programme (script) affiche les résultats de son travail. Habituellement, il s'agit d'un "moniteur", mais il est autorisé à remapper sur un fichier, une socket, un flux d'entrée d'un autre programme, une imprimante, etc.

La plupart des exemples de ce manuel sont écrits uniquement sur la coque afin de simplifier la présentation du matériau.

Il n'est pas recommandé d' utiliser le shell pour écrire des scripts CGI, conformément aux consignes de sécurité finales.

1.1 Appel CGI sans paramètres

Un script très simple affichant la date actuelle: #!/bin/sh echo Content-type: text/html echo echo "

Aujourd'hui est "date écho"

"Dans l'acte HTML, une référence est décrite ici de cette manière <a href = http: //translate.googleusercontent.com/translate_c? depth = 1 & hl = fr & amp; prev = hp & amp; rurl = translate.google.com & amp; sl = fr & amp = nmt4 & amp; tl = fr & amp; u = http://www.shram.kiev.ua/cgi-bin/examples/today.cgi&usg=ALkJrhjdUrk4cKRwcRqeR4bhnHlkYmc92w>

REMARQUE IMPORTANTE L'erreur de base que presque tous ceux qui commencent à écrire des programmes CGI ou des scripts commettent est qu'ils oublient d'insérer un pointeur sur le type du résultat à imprimer - l'en-tête du document de sortie. C'est aussi la troisième ligne de l'exemple.

echo Type de contenu: text / html echo Content-type: - le type de la sortie de l'acte (texte / html, image / gif, image / jpeg, etc.).
La ligne vide dans la conclusion exprime que le titre s'est également terminé dans le document lui-même.

1.2 Transmission des paramètres au script ou au programme CGI

Les paramètres sont transférés par paires en utilisant les méthodes de base: GET est également POST . Chacun d'eux a ses avantages et ses inconvénients.

Si vous utilisez GET, les paramètres sont ajoutés à l'URL demandée, et vous pouvez également l'appeler comme ceci:

Options http: // some_host / cgi-bin / some_script? ce qui vous permet d'agir sur de tels liens de script dans des documents HTML. Et sur le serveur, les paramètres transférés sont affectés à la variable QUERY_STRING.

Le texte du script lui-même: #!/bin/sh echo Content-type: text/html echo echo "

Vous avez envoyé ceci ici:

"echo" "ensemble | grep QUERY_STRING echo"

"echo" Environnement
"set echo" "</ code> et comment il a été appelé à partir de ce document: <a href = http: //translate.googleusercontent.com/translate_c? depth = 1 & hl = fr & amp; prev = hp & amp; rurl = translate.google.com & amp; sl = fr & amp = nmt4 & amp; tl = fr & amp; u = http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&usg=ALkJrhipNLssAgM8-K-gbm9_lvLWLEMH-Q> Échantillon de travail (cliquez ici) </a>

Cependant, l'utilisation de la méthode GET pour transmettre des paramètres contenant des informations confidentielles est inacceptable. dans ce cas toutes ces informations sont transmises ouvertement.

La méthode POST vous permet d'assurer la confidentialité lors de la transmission de paramètres à un script. Mais il transmet les paramètres au flux d'entrée standard et vous devez utiliser des formulaires pour cela. Le serveur n'envoie pas le script EOF à la fin du programme. Au lieu de cela, vous devez utiliser la variable d'environnement CONTENT_LENGTH pour déterminer la capacité de données dont vous avez besoin de calculer à partir de stdin.

Créer un compteur

Récemment, le nombre de personnes souhaitant joindre une visite à leur page augmente à un rythme effréné. Sur Internet, mangez beaucoup d'endroits où les gens peuvent prendre des compteurs pour n'importe quel système d'exploitation et les visser à leurs pages.

Ce chef de gestion deviendra plus utile pour ceux qui sont intéressés par le mécanisme du travail des guichets, puisque tous les exemples ci-joints sont des «cloches et sifflets» spéciaux selon les éléments du cadre, de l'administration, etc. pas moyen. Des compteurs plus "sophistiqués", prêts à l'emploi, recherchent Altavista, Yahoo et d'autres moteurs de recherche. Ou demandez dans les conférences de nouvelles pertinentes (relcom.www.users, relcom.www.support; in fidoshnyh ehah ru.internet. *).

2.1 Types de compteurs

En ce qui concerne le mécanisme de travail, les compteurs peuvent être conditionnellement divisés en deux types:
  1. Les scripts CGI fonctionnent comme Server Side Include
  2. Les scripts CGI qui n'utilisent pas Server Side Include
Server Side Include (SSI) est un type de commentaire HTML qui indique au serveur Web que les données générées dynamiquement doivent être remplacées dans la salle d'appel. Le format de base de l'appel SSI dans le corps du document HTML est le suivant:

<!--#command tag="value"...-->

#command est l'une des nombreuses commandes comprises par le serveur Web. Dans ce cas, le plus intéressant est la commande #exec , qui permet d'exécuter des programmes pour également substituer les résultats de leur travail. Les documents analysés par le serveur Web sont appelés documents analysés par le serveur.

2.2 Comptoir de visite travaillant comme SSI

Et l' algorithme de travail:

  1. Le serveur acquiert une requête du navigateur pour le document HTML.
  2. Le serveur recherche l'appel SSI.
  3. Si de tels appels sont détectés, le résultat est placé dans leurs locaux. Dans le cas de la commande #exec , le résultat du travail du programme spécifié dans "value" .
  4. L'action HTML générée a été définie dans le chemin inverse du navigateur.

Paramètres de serveur requis (sur l'exemple de serveur Apache ):

  1. Dans le fichier srm.conf, écrivez (s'il n'y a pas encore écrit): Texte AddType / html .shtml AddHandler server-parsed .shtml Ces directives indiquent au serveur que les fichiers avec l'extension .shtml sont des documents analysés par le serveur.
  2. Dans le fichier access.conf du répertoire où se trouvent les documents analysés par le serveur, ajoutez l'option Includes dans Options.
  3. Pour les fichiers contenant des appels SSI, attribuez l'extension .shtml (voir l'article 1)
Nous montrons le fonctionnement du compteur sur un échantillon du contre script, disponible sur Internet à l'adresse http://www.webtools.org/. Il est écrit en Perl, si populaire aujourd'hui.

D' ici, nous allons calculer: <! - # exec cgi = "/ cgi-bin / counter" ->
(cliquez sur Recharger jusqu'à ce que vous vous ennuyiez)

Ce compteur est du texte, c'est-à-dire le script donne juste le texte, qui est montré. De même, les images peuvent être jointes. Pour ce faire, vous devez remplacer les chiffres par les balises img src = "picture_c_corresponding_cipher". Un lecteur curieux devinera facilement que le nombre de tags img src ... est égal au nombre de chiffres de la valeur renvoyée par le compteur.

Le compteur de ce compteur dans le corps de l'acte est exécuté par la commande: <!--#exec cgi="/cgi-bin/counter"-->

2.3 Un compteur qui n'utilise pas SSI

Plus simple du point de vue de l'utilisateur, mais plus complexe en programmation, le compteur n'utilise pas SSI de quelque manière que ce soit. Le mécanisme de fonctionnement d'un tel compteur est le suivant:

  • dans le corps de l'acte HTML il est indiqué: &lt;img src = / cgi-bin / exemples / counter.cgi&gt; c'est à dire l'image demandée n'est pas statique, mais est générée dynamiquement par un script CGI.
  • le serveur, ayant reçu une requête pour une image, exécute le script spécifié dans le src de la balise img .
  • script, augmente la valeur du compteur par pièce, génère une image avec la valeur du compteur donne également au navigateur.

Puisque ce type de compteur est le plus populaire sur Internet, l'algorithme de son travail sera examiné plus en détail.

Avec la crypte ( counter.cgi ), qui est appelée dans le corps du document HTML par la balise img src = "... counter.cgi" écrite dans le shell possède également le code source suivant (numéros de ligne ajouté uniquement pour simplifier l'explication): 1: #!/bin/sh 2: now=`date -u` 3: echo "Content-type: image/gif;" 4: echo "Expires: $now" 5: echo 6: counter|showdigits 1: #!/bin/sh 2: now=`date -u` 3: echo "Content-type: image/gif;" 4: echo "Expires: $now" 5: echo 6: counter|showdigits

Que ce script (une description de ligne) fonctionne:
1 - Le titre du script lui-même. Il pointe vers l'interpréteur de commande qui l'exécutera.

2 - Définir la variable now , qui contient l'heure de début du script (l'heure à laquelle l'image a été créée). La touche ' -u ' indique que la date et l'heure de création sont affichées en GMT . Pourquoi cela devrait être décrit ci-dessous.

3 - Nous commençons à former le titre de l'objection du serveur. Spécifiez le type de données renvoyées: image / gif

4 - Puisqu'il s'agit d'un compteur, il est nécessaire de s'assurer que le kartika avec ses indications ne soit en aucune façon caché (et quel type de compteur il sera plus tard :) . Pour ce faire, nous indiquons que l'image reçue par le navigateur devrait immédiatement zaekspayritsya. Ici, nous utilisons également la variable now , définie dans la ligne numéro 2. L'utilisation d'Expires dans ce formulaire correspond à la norme pour le protocole HTTP version 1.1. Mais lorsque vous utilisez Expires, le fonctionnement d'un acte peut commencer par de drôles de problèmes, si les heures sur le client sont en retard sur l'horloge du serveur pendant quelques minutes. Un dilemme commence - il est établi par la norme de cette façon, mais il s'avère que ce n'est pas exactement ce dont vous avez besoin. Que devrais-je faire? Dans la version précédente du protocole (HTTP 1.0), Expires était autorisé à mettre à 0, mais RFC2068 indique que les clients fonctionnant également sur HTTP 1.1 devraient prendre en charge la variation ancienne de l'utilisation d'Expires (Expires: 0). Donc, le personnel, chers Russes, décide pour vous-même.

5 - Fin de l'en-tête d'objection - renvoie une chaîne vide.

6 - L'utilisation de deux programmes (compteur également showdigits) génère l'image elle-même.

Les programmes de comptage showdigits sont écrits en C en utilisant la librairie main avec des fichiers GIF - libgd. Sans cela, les programmes ne seront pas compilés. La dernière version de la bibliothèque peut toujours être obtenue à http://www.boutell.com/gd/ .

Ensuite, ces programmes fonctionnent:

  • counter - lit à partir du fichier counter.rc le nombre qui représente la valeur précédente du compteur, ajoute un à celui-ci, écrit également à l'arrière. Si vous ne spécifiez pas la route vers les fichiers - images avec des chiffres, également le masque de ces fichiers, puis prenez la valeur par défaut, qui est définie dans le corps du programme. Après cela, il a calculé la valeur du compteur et la route vers les images est sortie vers stdout, que la ligne de commande pour showdigits est générée.
  • showdigits - ce programme, en fait, forme également une image avec la lecture actuelle du compteur. Pour ce faire, nous utilisons un ensemble d'images prêtes à l'emploi avec des figures (format gif, toutes les images de même taille) également reçues sur stdin à partir des données du compteur . Sur la route, le masque est également pris du nombre d'images requises et l'un d'eux est recueilli par un hyph. Après cela, il va directement à ... stdout ! Et puis le serveur redirige ce flux vers le navigateur, aussi, il (le navigateur) l'illustre comme une image, puisque l'en-tête d'objection indique qu'il s'agit d'un hyph.
L' essence ici est: - Le serveur envoie un flux de données au navigateur. - Le navigateur est tout de même, à quel endroit le serveur a pris le flux de données qui lui est transmis (statique ou généré dynamiquement, un fichier normal ou le résultat de l'activité vitale du script), c'est que le navigateur sait l'interpréter correctement. Pour ce faire, utilisez l'en-tête, qui dans cet exemple a été généré par le script counter.cgi , mais dans 3-5 lignes (voir ci-dessus). Et, dans le cas de fichiers statiques, le serveur lui-même génère cet en-tête en fonction de ses propres paramètres, mais dans le cas de cgi, cela devrait être fait par le script lui-même.

Le côté serveur inclut

Eh bien, il est clair que les documents HTML statiques sont bons, mais ceux créés dynamiquement sont encore meilleurs. :) Donc, dans cette tête, nous allons parler de la création dynamique de documents en utilisant Server Side Includes. En passant, nous notons que la possibilité d'utiliser SSI est la capacité de chaque serveur particulier. Certains serveurs ne supportent pas SSI de quelque manière que ce soit, mais pour ceux qui ont cette capacité, les formats peuvent également différer dans les ensembles de commandes. Alors, lisez les instructions d'utilisation de votre serveur Web. Tous les exemples de ce chapitre concernent le serveur Apache.

3.1 Qu'est-ce que SSI

Comme mentionné précédemment dans le chapitre précédent, Server Side Include (SSI) est une directive de serveur Web qui permet au serveur de placer des données dans les locaux de l'appel. Dans un acte HTML, l'appel SSI ressemble à un commentaire de format:

<!--#command tag="value"...-->

#command est l'une des directives SSI comprises par le serveur Web, mais " value " est ses paramètres.

Les données fournies peuvent également être statiques, générées dynamiquement. Les données statiques sont déjà prêtes, écrites sous la forme de fichiers, de fragments de texte ou de HTML. Ces données sont pratiques à utiliser dans le cas où, dans divers documents HTML, vous pouvez mettre des fragments répétitifs. Les données générées dynamiquement résultent du travail des scripts CGI ou des commandes du système d'exploitation sur lesquels un serveur Web particulier est exécuté. L'utilisation de ce type de données offre de grandes opportunités au développeur Web. Mais, selon la publicité russe-bourgeoise débilitante, "Ne pas oublier d'orbite sans sucre!". Je veux dire, se rappeler des mesures pour se conformer à un accès sécurisé à l'information! Une utilisation incorrecte de SSI peut conduire à la possibilité d'un accès non autorisé à l'information et, par conséquent, à diverses conséquences graves. .

3.2 Directives SSI de base

config gère divers aspects de l'analyse d'un document. Attributs: message d'erreur errmsg retourné au client, si une erreur s'est produite lors de l'analyse du document. sizefmt définit la taille de la taille du fichier (octets, kilooctets, mégaoctets). timefmt définit le format date / heure. echo affiche la valeur de l'une des variables d'environnement suivantes. Attributs: var Le nom de la variable d'impression exec exécute la commande spécifiée ou le script CGI. Attributs: cgi est spécifié (% -coded) URL relative au script CGI. Si l'itinéraire ne commence pas par (/), il est supposé que l'itinéraire est spécifié par rapport au document en cours.

Le script CGI est transmis à la valeur des variables PATH_INFO et QUERY_STRING de la requête client d'origine.

Le serveur cmd exécute la chaîne spécifiée à l'aide du shell du système d'exploitation. fsize affiche la taille du fichier spécifié en ce qui concerne sizefmt . Attributs: le fichier spécifie le chemin d'accès au fichier par rapport au répertoire courant contenant le fichier analysé. virtual est spécifié (% -coded) URL relative au fichier. Si l'itinéraire ne commence pas par (/), il est supposé que l'itinéraire est spécifié par rapport au document en cours. flastmod imprime la date / heure de la dernière modification du fichier spécifié en tenant compte du timefmt . Les attributs sont aussi bons que la commande fsize . include insère le texte d'un autre acte ou fichier dans le document analysé. C'est très utile pour répéter des fragments dans différents documents. Attributs: le fichier spécifie le chemin vers le fichier uniquement par rapport au répertoire courant contenant le fichier analysé. virtual est spécifié (% -coded) URL relative au fichier. Si l'itinéraire ne commence pas par (/), il est supposé que l'itinéraire est spécifié par rapport au document en cours. Dans Apache, les fichiers inclus peuvent exister imbriqués. printenv imprime une liste de toutes les variables existantes ainsi que leurs valeurs. Il n'y a pas d'attributs. Exemple:
<!--#printenv --> set définit la valeur de la variable. Attributs: var spécifie le nom de la variable à définir. value indique la valeur de la variable en cours de définition. Exemple:
<!--#set var="variable_1" value="some_value_of_variable_1" -->

3.3 Variables d'environnement SSI

DOCUMENT_NAME - nom de fichier Description dans le corps du document: <!--#echo var="DOCUMENT_NAME" --> Résultat d'utilisation: <! - # echo var = "DOCUMENT_NAME" ->

DOCUMENT_URI - chemin virtuel vers le fichier Description dans le corps du document: <!--#echo var="DOCUMENT_URI" --> Résultat d'utilisation: <! - # echo var = "DOCUMENT_URI" ->

QUERY_STRING_UNESCAPED - décodage de la chaîne de requête, avec tous les métacaractères du shell précédés de "\" Description dans le corps du document: <!--#echo var="QUERY_STRING_UNESCAPED" --> Résultat d'utilisation: (aucun)

DATE_LOCAL - date courante aussi heure (locale) Description dans le corps du document: <!--#echo var="DATE_LOCAL" --> Résultat d'utilisation: <! - # echo var = "DATE_LOCAL" ->

DATE_GMT - date du jour et heure (GMT) Description dans le corps du document: <!--#echo var="DATE_GMT" --> Résultat d'utilisation: <! - # echo var = "DATE_GMT" ->

LAST_MODIFIED - la date est aussi l'heure de la dernière modification du fichier Description dans le corps du document: <!--#echo var="LAST_MODIFIED" --> Résultat d'utilisation: <! - # echo var = "LAST_MODIFIED"

3.4 Configuration du serveur

Pour s'assurer que le serever savait, dans quelle pièce de la loi pour remplacer les données, il est obligé d'analyser cet acte. Les documents analysés par le serveur sont appelés documents analysés par le serveur.

Tout d'abord, vous devez indiquer au serveur les documents à analyser. Pour ce faire, vous devez ajouter les paramètres suivants au fichier de configuration (pour Apache, les anciennes versions des serveurs Web NCSA sont également le fichier srm.conf , mais pour les nouvelles versions d'Apache, par exemple 1.3.4 - httpd.conf ), vous devez ajouter les paramètres suivants: Serveur Apache:

Texte AddType / html .shtml &lt;br&gt; AddHandler server-parsed .shtml

Serveur NCSA:

Texte AddType / x-server-parsed-html .shtml Les paramètres spécifiés expriment que tous les fichiers avec l'extension .shtml sont serveur-analysé , également avant de "donner" cet acte au client, le serveur devrait les analyser.

Pourquoi spécifier une extension séparée pour les documents analysés par serveur?, Le lecteur curieux demandera. Nous répondons. Bien sûr, personne n'interfère avec l'ajout au fichier de configuration d'une chaîne

Texte AddType / x-server-parsed-html .html Cependant, cela entraînera l'examen par le serveur de tous les documents avec une extension .html, Même s'ils n'ont pas d'appel SSI, la charge du système augmentera, mais les performances du serveur diminueront.

Il convient également de rappeler qu'il est impossible d'inclure l'appel SSI dans le programme CGI, car leur conclusion n'est pas analysée par le serveur.

Pour plus d'informations sur la configuration de votre serveur pour l'utilisation de SSI, lisez la documentation sur votre serveur.

Apps

Annexe 1. Variables de l'environnement du serveur

Vous trouverez ci-dessous une liste des variables d'environnement du serveur principal avec une brève description de l'objectif: dans ce cas, le serveur Apache 1.2.5 avec le module PHP / FI-2.0.1. Pour les autres serveurs Web (MS IIS, Netscape, NCSA httpd, etc.), les variables peuvent varier.

REMOTE_HOST - le nom de l'hôte qui est connecté au serveur. En cas de travail via un proxy, le nom du proxy.
Exemple: REMOTE_HOST = lom.pvrr.ru

REMOTE_ADDR - Adresse IP de l'hôte connecté au serveur. En cas de travail via un proxy - l'adresse IP du proxy.
Exemple: REMOTE_ADDR = 194.87.186.11

REMOTE_PORT est le numéro de port du client.
Exemple: REMOTE_PORT = 3381

HTTP_USER_AGENT - nom / numéro de version / etc. client (navigateur). L'utilisation de cette variable conduit parfois à la frénésie des internautes individuels. :) Mais dans la classe elle-même est une chose très utile. Par exemple, pour détecter automatiquement les codages russes.
Exemple: HTTP_USER_AGENT = Mozilla / 4.07 [fr] (X11; I; FreeBSD 2.2.6-RELEASE i386)

HTTP_ACCEPT - types de données autres que text / html, perçus par le client (navigateur)
Exemple: HTTP_ACCEPT = image / gif, image / x-xbitmap, image / jpeg, image / pjpeg, image / png, * / *

HTTP_ACCEPT_CHARSET - quels chars sont compris par le client (navigateur).
Exemple: HTTP_ACCEPT_CHARSET = iso-8859-1, *, utf-8

HTTP_ACCEPT_LANGUAGE - quelles langues sont perçues par le client (navigateur).
Exemple: HTTP_ACCEPT_LANGUAGE = nl, nl-BE, en

* * *

SERVER_NAME est le nom du serveur correspondant à l'enregistrement IN A dans DNS ou à la valeur de la variable ServerName (ou similaire) dans la configuration du serveur.
Exemple: SERVER_NAME = arche.pvrr.ru

HTTP_HOST est le nom du serveur ou de l'hôte virtuel auquel le client accède. La valeur HTTP_HOST peut exister égale à la valeur de SERVER_NAME.
Exemple: HTTP_HOST = www.pvrr.ru

SERVER_SOFTWARE - quel logiciel est utilisé comme serveur.
Exemple: SERVER_SOFTWARE = ​​Apache / 1.2.5 PHP / FI-2.0.1

DOCUMENT_ROOT - route vers la "racine" du serveur Web à partir de la "racine" du système de fichiers de l'ordinateur sur lequel il est exécuté.
Exemple: DOCUMENT_ROOT = / usr / local / www / html

HTTP_CONNECTION est le type de connexion.
Exemple: HTTP_CONNECTION = keep-alive

SERVER_PROTOCOL est le protocole utilisé pour communiquer avec un client spécifique.
Exemple: SERVER_PROTOCOL = HTTP / 1.0

REQUEST_URI est le nom de la ressource / du document demandé, qui inclut le chemin depuis la racine du serveur Web. Lors de l'accès à la racine du serveur ou au répertoire de cette variable, le nom du répertoire est donné soit "/" dans le cas de la racine du serveur.
Exemple: REQUEST_URI = / cgi-bin / tralala / script.cgi

DOCUMENT_URI - имя запрашиваемого ресурса/документа, включающее в себя путь от корня веб-сервера. Обычно инициализируется при вызове SSI. В отличие от REQUEST_URI эта переменная, в случае обращения к каталогу либо корню сервера получает значение содержащее также имя файла, являющегося Directory Index'ом этого каталога.
Пример: DOCUMENT_URI=/tralala/index.shtml

HTTP_REFERER - наполненный URL документа, по ссылке с которого вы попали на этот сервер. Данную переменную разрешено использовать при написании счетчиков.
Пример: HTTP_REFERER=http://lom.pvrr.ru/java/cgi/cgi_1.html

GATEWAY_INTERFACE - название/версия интерфейса, чрез какой сервер работает со скриптом.
Пример: GATEWAY_INTERFACE=CGI/1.1

SCRIPT_FILENAME - имя скрипта, содержащее наполненный маршрут от "корня" файловой системы.
Пример:SCRIPT_FILENAME=/usr/local/www/cgi-bin/tralala/script.cgi

SCRIPT_NAME - имя скрипта, содержащее маршрут от "корня" веб-сервера.
Пример: SCRIPT_NAME=/cgi-bin/tralala/script.cgi

REQUEST_METHOD - метод используемый заказчиком для передачи данных серверу. Бывают GET, HEAD, POST, PUT.
Пример: REQUEST_METHOD=GET

QUERY_STRING - этой переменной значение присваивается при передаче данных серверу методом GET
Пример: QUERY_STRING=button=on

CONTENT_LENGTH - этой переменной присваивается значение, равное количеству байт, переданных браузером серверу при использовании метода POST.
Пример: CONTENT_LENGTH=9

REMOTE_USER - имя пользователя. Передается только если аутентифицируется доступ к CGI скрипту.

PATH_INFO - дополнительная информация о маршруту, которую передал клиент. То кушать скрипт может приобретать некоторые параметры, содержащие информауцию о некотором "маршруте" к некоторым данным (например к файлу конфигурации, необходимому для отделки запроса отименно этого клиента). Этот маршрут "виртуальный" - т.е от "корня веб-сервера". Остальные данные разрешено передавать как обычно - методом GET или POST.
Пример: PATH_INFO=/some/path

PATH_TRANSLATED - то бла бла , что также PATH_INFO, только маршрут физический - "от корня файловой системы"

REMOTE_IDENT - Если HTTP сервер поддерживает идентификацию согласно RFC 931, то этой переменной присваивается имя пользователя получаемое от сервера.

SERVER_ADMIN - e-mail правителя веб-сервера.
Пример: SERVER_ADMIN=webmaster@www.pvrr.ru

SERVER_PORT - порт, какой "слушает" веб-сервер.
Пример: SERVER_PORT=80

* * *

HTTP_X_FORWARDED_FOR - в случае труда чрез прокси - IP адрес клиента, работаеющего чрез прокси.
Пример: HTTP_X_FORWARDED_FOR=194.87.186.11

HTTP_VIA - имя, номер порта, разновидность ПО прокси-сервера.
Пример: HTTP_VIA=1.0 proxy1.pvrr.ru:8080 (Squid/2.1.PATCH1)

HTTP_CACHE_CONTROL - что-то связанное с возрастом акта в кэше прокси сервера :) Лгать никак не буду - никак не знаю :)
Пример: HTTP_CACHE_CONTROL=max-age=259200