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

Все про CGI (Common Gateway Interface)

Що таке CGI?

З початку Рабер з термінологією. CGI - Commom Gateway Interface це інтерфейс, що дозволяє веб-сервера за запитом браузера пускати на собі будь-які програми також результат їх роботи давати браузеру. CGI програма (скрипт) - програма (скрипт), що працює на сервері також обмінюється даними з браузером через вищезгаданий інтерфейс. Оскільки ніяк не існує жорсткої регламентації щодо визначень також термінів, то вельми часто, говорячи CGI, мають внаслідок саме програму (скрипт), але ніяк не особисто інтерфейс.

Е слі це програма, то вона повинна володіти всякий прийнятний для конкретної операційної системи виконуваний формат. Програми дозволено строчити на чому завгодно: C / C ++, Pascal, Java, Visual також просто Basic, delphi також т.д.

Е слі це скрипт (сценарій), то на операційній системі, під якою крутитися веб-сервер змушений існувати відповідний інтерпретатор сценаріїв: shell, perl, tcl / tk, command.com також т.д.

Г лавного, щоб засіб разарботкі CGI програми (скрипта) відповідало наступним потребам: - дозволяють вимовляти зі стандартного потоку введення (stdin) - набувати значень змінних оточення (environment variables) - укладати в стандартний потік висновку (stdout)

Д ля чого використовується CGI:

  • Робота з довідковими системами також базами даних.
  • Створення динамічних HTML документів також ресурсів (в тому числі лічильники, гостьові книги також т.д.)
  • Віддалене адміністрування різних систем.
  • Просто праця з різними програмами, оскільки HTML інтерфейс досить зручний у використанні, простий у виготовленні також приємно виглядає :)

Механізм праці CGI програм

До ак вже було сказано, CGI набуває вхідні дані зі стандартного потоку введення stdin або з змінних оточення, але виводить результати своєї праці в стандартний потік висновку stdout. Для тих. хто не знає, що це таке: Стандартний потік введення (stdin) - звідси програма (скрипт) по-замовчуванню набуває вхідну інформацію. Зазвичай це клавіатура, але його можна перепризначити, також програма (скрипт) стане купувати вхідні дані з файлу, сокета, вихідного потоку іншої програми.

Змінні оточення (environment variables) - змінні, визначені для системи також сервера, на якій стане виконуватися CGI. .

Стандартний потік виводу (stdout) - сюди програма (скрипт) виводить результати своєї роботи. Зазвичай це "монітор", але його дозволено перепризначив на файл, сокет, вхідний потік іншої програми, принтер також т.д.

Б ольшинство прикладів в цьому керівництві написано на shell тільки для того, щоб спростити виклад матеріалу.

З огласно завершальним віянням з дотримання безпеки не рекомендується використання shell для написання CGI скриптів.

1.1 Виклик CGI без параметрів

П зростання скрипт, що виводить поточну дату: #!/bin/sh echo Content-type: text/html echo echo "

Today is "date echo"

"В HTML акті посилання на нього опісивет ось таким чином <A href = http: //translate.googleusercontent.com/translate_c? Depth = 1 & amp; hl = ru & amp; prev = hp & amp; rurl = translate.google.com & amp; sl = ru & amp; sp = nmt4 & amp; tl = uk & amp; u = http://www.shram.kiev.ua/cgi-bin/examples/today.cgi&usg=ALkJrhg2V09ttWOdt5sG3haGZ650s4zLyg>

ВАЖЛИВЕ ЗАУВАЖЕННЯ Основний похибкою, яку здійснюють приблизно всі, хто затіває строчити CGI програми або скрипти, полягає в тому, що вони забувають вставити покажчик на тип виведеного результату - заголовок виведеного документа. Це інша також третя строчки в прикладі.

echo Content-type: text / html echo де Content-type: - тип виведеного акта (text / html, image / gif, image / jpeg також т.д.).
Порожній рядок в ув'язненні висловлює про те, що заголовок скінчився також далі йде власне особисто документ.

1.2 Передача параметрів CGI скрипту або програмі

П ередача параметрів здійснюється парою основними методами: GET також POST. У кожного з них свої плюси також недоліки.

П ри використанні GET параметри додаються до запитуваного URL також його можна викликати таким чином:

http: // якийсь то_хост / cgi-bin / якийсь то_скріпт? параметри що дозволяє діяти на такий скрипт посилання в HTML документах. А на сервері передані параметри присвоюються змінної QUERY_STRING.

Текст самого скрипта: #!/bin/sh echo Content-type: text/html echo echo "

Ви посилали ось це:

"Echo" "set | grep QUERY_STRING echo"

"Echo" Environment
"Set echo" "</ code> і як він викликався з цього документа: <A href = http: //translate.googleusercontent.com/translate_c? Depth = 1 & amp; hl = ru & amp; prev = hp & amp; rurl = translate.google.com & amp; sl = ru & amp; sp = nmt4 & amp; tl = uk & amp; u = http://www.shram.kiev.ua/cgi-bin/examples/link.cgi%3Fsome_parameters&usg=ALkJrhi5iCPw6tj8CjlujNp_LwxpW9gU4Q> Зразок праці (ткніте тут) </a>

Н про застосування методу GET для передачі параметрів, що містять конфіденційну інформацію неприпустимо, тому що в даному випадку вся ця інформація передається відкрито.

М етод POST дозволяє забезпечити конфіденційність при передачі параметрів скрипту. Але він передає параметри на стандартний потік введення також для цього доводиться використовувати форми. Сервер ніяк вже не подає скрипту EOF в кінці передачі. Замість цього вам доведеться використовувати пременися оточення CONTENT_LENGTH, щоб визначити який ємність даних вам треба обчислювати з stdin.

пишемо лічильник

Останнім часом, число людей бажаючих причепити на свою сторінку лічильник відвідувань виростає шаленими темпами. В Інтернеті їсти чимало місць, де бажаючі можуть взяти будь-які лічильники під будь-які операційні системи і прикрутити їх на свої сторінки.

Е та голова керівництва стане швидше корисна тим, кому цікавий саме механізм праці лічильників, оскільки всі прикладені приклади особливими "наворотами" по елементи налаштувань, адміністренія, також т.п. не мають. Більш "наворочені", готові до експлуатації лічильники шукайте на Altavista, Yahooтакже ін. Пошукових серверах. Або запитуйте у відповідних конференціях новин (relcom.www.users, relcom.www.support; в Федишин ехах ru.internet. *).

2.1 Типи лічильників

П про механізму праці лічильники умовно можна розділити на пари типу:
  1. CGI скрипти працюють як Server Side Include
  2. CGI скрипти ніяк не використовують Server Side Include
Server Side Include (SSI) - тип HTML коментаря, який вказує Web серверу, що в приміщенні виклику необхідно підставити динамічно згенеровані дані. Основний формат виклику SSI в тілі HTML документа виглядає наступним чином:

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

де #command - будь-яка з численних команд розуміються Web сервером. В даному випадку найбільший інтерес представляє команда #exec, яка дозволяє виконувати програми також підставляти результати їх роботи. Аналізовані Web сервером HTML документи називаються server-parsed документами.

2.2 Лічильник відвідувань працює як SSI

А лгорітм роботи:

  1. Сервер набуває від браузера запит на HTML документ.
  2. Сервер переглядає акт на наявність виклику SSI.
  3. Якщо такі виклики виявлені, то на їх приміщення підставляється результат. У разі команди #exec - результат праці програми, зазначеної в "value".
  4. Сформований HTML акт пустився в зворотний шлях браузеру.

Н еобходимо настройки сервера (на зразку сервера Apache ):

  1. У файлі srm.conf прописати (якщо там ще ніяк не прописано): AddType text / html .shtml AddHandler server-parsed .shtml Ці директиви висловлюють серверу, що файли з розширенням .shtml є server-parsed документами.
  2. У файлі access.conf на директорію, в якому місці будуть лежати server-parsed документи, в Options додати опцію Includes.
  3. Файлів, що містять виклики SSI привласнити розширення .shtml (див. П. 1)
Продемонструємо роботу лічильника на зразку скрипта counter, знайденого в Інтернеті на http://www.webtools.org/. Він написаний на такому популярному нині Perl'е.

В від тут будемо обчислювати: <! - # exec cgi = "/ cgi-bin / counter" ->
(Натискайте Reload поки ніяк не набридне)

Е той лічильник текстовий, тобто скрипт віддає просто текст, який і показується. Схожим чином дозволено укладати також картинки. Для цього потрібно, щоб замість текстових цифр виводилися теги img src = "картінка_с_соответсвующей_ціфрой". Допитливий читач легко здогадається, що кількість тегів img src ... дорівнює числу цифр у значенні возвращаемом лічильником.

У изов цього лічильника в тілі акта здійснюється командою: <!--#exec cgi="/cgi-bin/counter"-->

2.3 Лічильник ніяк що не використовує SSI

Б олее нехитрим з точки зору користувача, але більш складним в програмуванні є лічильник ніяк що не використовує SSI. Механізм праці такого лічильника представляє із себе наступне:

  • в тілі HTML акта зазначається: &lt;Img src = / cgi-bin / examples / counter.cgi&gt; тобто запитувана картинка ніяк не є статичною, а динамічно генерується CGI скриптом.
  • сервер, отримавши запит на картинку, запускає скрипт, вказаний в src тега img.
  • скрипт, збільшує значення лічильника на штуку, генерує картинку зі значенням лічильника також віддає її браузеру.

П оскольку цей тип лічильників є найпопулярнішим в Інтернеті, то алгоритм його праці розглянемо більш докладно.

З крипт (counter.cgi), який викликається в тілі HTML документа тегом img src = "... counter.cgi" написаний на shell також володіє наступний початковий текст (номери рядків додані тільки для спрощення пояснення): 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

Ч то діє цей скрипт (построковое опис):
1 - Тема самого скрипта. Він вказує на командний інтерпретатор, який стане його виконувати.

2 - Визначаємо змінну now, яка містить час запуску скрипта (час створення картинки). Ключик '-u' каже, що, дата / час створення виводяться в GMT. Навіщо це треба стане описано нижче.

3 - затівати формувати заголовок заперечення сервера. Вказуємо тип повертаються даних: image / gif

4 - Оскільки це лічильник, то необхідно забезпечити, щоб картика з його показаннями ніяк НЕ кешувати (а то який він пізніше цього лічильник :) . Для цього вказуємо, що полученая браузером картинка повинна негайно заекспайріться. Ось тут то ми також використовуємо змінну now, визначену в рядку номер 2. Вживання Expires в такому вигляді відповідає стандарту на HTTP протокол версії 1.1. Але при використанні Expires рівним датою створення акта можуть починатися забавні глюки, якщо годинник на замовнику відстають від годинника сервера на кілька хвилин. Починається дилема - за стандартом покладено так, але виходить ніяк не те що треба. Що робити? У попередній версії протоколу (HTTP 1.0) Expires дозволено було виставляти рівним 0, але RFC2068 свідчить, що клієнти також кеші працюють по HTTP 1.1 повинні підтримувати древній варіація використання Expires (Expires: 0). Так шта, дорогі росіяни, вирішуйте самі.

5 - Кінець заголовка заперечення - повертаємо порожню рядок.

6 - Використовуючи дві програми (counter також showdigits) генерітся саму картинку.

П рограмма counter також showdigits написані на Сі з використанням бібліотеки для праці з GIF файлами - libgd. Без неї програми компілюватися ніяк не будуть. Останню версію бібліотеки прктически завжди можна отримати на http://www.boutell.com/gd/.

Ч то діють дані програми:

  • counter - читає з файлу counter.rc кількість, що представляє із себе попереднє значення лічильника, додає до нього одиничку також строчить тому. Якщо ніяк не вказаний маршрут до файлів - картинкам з цифрами також маска цих файлів, то береться дефолтовая, яка определнного в тілі програми. Після цього вона обчислене значення лічильника також маршруту до картинок виводяться на stdout, ніж формується командний рядок для showdigits.
  • showdigits - ця програма, власне, також формує картинку з поточним показанням лічильника. Для цього використовується набір готових картинок з цифрами (gif формат, все картинки однакового розміру) також отримані на stdin від counter дані. По маршруту, масці також числа беруться потрібні картинки також з них збирається один гіф. Після чого він відправляється прямо на ... stdout! А далі сервер перенапрявлять цей потік браузеру також він (браузер) ілюструє його як картинку, оскільки в заголовку заперечення зазначено, що це гіф.
В ся сутність тут ось у чому: - Сервер передає браузеру потік даних. - Браузеру повно все одно, в якому місці також як сервер взяв переданий йому потік даних (статичний чи це, або динамічно сгенеренний; звичайний файл або результат життєдіяльності скрипта), суть, щоб браузер знав як його правильно інтерпретувати. Для цього служить заголовок, який в даному зразку був згенерований скриптом counter.cgi, але саме в 3-5 рядках (див. Вище). Причому, в разі статичних файлів сервер особисто генерує цей заголовок, виходячи з власних налаштувань, але у випадку з cgi це повинен робити особисто скрипт.

Server side includes

Е жу зрозуміло, що статичні HTML документи - це добре, але динамічно створювані - ще краще. :) Так ось, в цій голові ми поговоримо про динамічний створенні документів з використанням Server Side Includes. Разом відзначимо, що можливість використання SSI - це можливість кожного конкретного сервера. Деякі сервера ніяк не підтримують SSI, але у тих, які мають таку можливість, можуть різнитися формати також набори команд. Так що, читайте інструкцію по експлуатації вашого Web-сервера. Всі приклади в цьому розділі приведені для сервера Apache.

3.1 Що таке SSI

До ак вже було сказано впредидущей чолі, Server Side Include (SSI) директива Web-сервера, що дозволяє сервера підставляти на приміщення виклику будь-які дані. В HTML акті виклик SSI виглядає як коментар формату:

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

де #command - будь-яка з SSI директив розуміються Web сервером, але "value" - її параметри.

Підставляються дані можуть бути статичними також динамічно генеруються. Статичні дані вже готові, записані у вигляді файлів, фрагменти тексту або HTML. Такі дані зручно застосовувати в разі, в який час в різних HTML документах поміщатися повторювані фрагменти. Динамічно генеруються дані результати праці яких-небудь CGI скриптів або команд операційної системи, на якій працює конкретний Web-сервер. Використання цього типу даних надає Web-девелоперу величезні можливості. Але, як свідчить дебільна російсько-буржуазна реклама, - "Не забувай про Орбіт без цукру!". Тобто, ПАМ'ЯТАЙ ПРО ЗАХОДИ ЩОДО ДОТРИМАННЯ БЕЗПЕКИ ДОСТУПУ ДО ІНФОРМАЦІЇ! Неправильне використання SSI може привести до появи можливості несанкціонованого доступу до інформації а також, відповідно, до різних тяжких наслідків. .

3.2 Основні SSI директиви

config управляє різними аспектами розбору (parsing) документа. Атрибути: errmsg повідомлення про похибки, що повертається клієнтові, якщо при розборі документа стався якийсь збій. sizefmt встановлює формат висновку розміру файлу (байти, кілобайти, мегабайти). timefmt встановлює формат висновку дати / часу. echo друкує значення однієї з ніжеопісаних змінних оточення. Атрибути: var ім'я друкованої змінної exec виконує зазначену команду або CGI скрипт. Атрибути: cgi вказується (% -кодування) URL-відносний маршрут до CGI скрипту. Якщо маршрут ніяк не почалась з (/), вважається, що маршрут вказаний щодо поточного документа.

CGI скрипту передаються так бла бла значення змінних PATH_INFO і QUERY_STRING оригінального запиту клієнта.

cmd сервер виконує зазначену рядок, використовуючи командний інтерпретатор операційної системи. fsize друкує розмір зазначеного файлу з урахуванням sizefmt. Атрибути: file вказується маршрут до файлу щодо поточної директорії містить аналізований файл. virtual вказується (% -кодування) URL-відносний маршрут до файлу. Якщо маршрут починається не з (/), вважається, що маршрут вказаний щодо поточного документа. flastmod друкує дату / час завершальній зміни зазначеного файлу з урахуванням timefmt. Атрибути такі бла бла як у команди fsize. include вставляє текст іншого акта або файлу в аналізований документ. Дуже корисна при повторюваних фрагментах в різних документах. Атрибути: file вказується маршрут до файлу тільки щодо поточної директорії містить аналізований файл. virtual вказується (% -кодування) URL-відносний маршрут до файлу. Якщо маршрут починається не з (/), вважається, що маршрут вказаний щодо поточного документа. В Apache включаються таким чином файли можуть існувати вкладеними. printenv друкує перелік всіх існуючих змінних також їх значення. Атрибутів немає. приклад:
<!--#printenv --> set встановлює значення змінної. Атрибути: var вказується ім'я установлюваної змінної. value вказується значення встановлюється змінної. приклад:
<!--#set var="variable_1" value="some_value_of_variable_1" -->

3.3 SSI змінні оточення

DOCUMENT_NAME - ім'я файлу Опис в тілі документа: <!--#echo var="DOCUMENT_NAME" --> Результат використання: <! - # echo var = "DOCUMENT_NAME" ->

DOCUMENT_URI - віртуальний маршрут до файлу Опис в тілі документа: <!--#echo var="DOCUMENT_URI" --> Результат використання: <! - # echo var = "DOCUMENT_URI" ->

QUERY_STRING_UNESCAPED - розкодування query string, причому всі метасимволу shell передує "\" Опис в тілі документа: <!--#echo var="QUERY_STRING_UNESCAPED" --> Результат використання: (none)

DATE_LOCAL - поточна дата також пора (місцеве) Опис в тілі документа: <!--#echo var="DATE_LOCAL" --> Результат використання: <! - # echo var = "DATE_LOCAL" ->

DATE_GMT - поточна дата також пора (GMT) Опис в тілі документа: <!--#echo var="DATE_GMT" --> Результат використання: <! - # echo var = "DATE_GMT" ->

LAST_MODIFIED - дата також пора завершальній зміни файлу Опис в тілі документа: <!--#echo var="LAST_MODIFIED" --> Результат використання: <! - # echo var = "LAST_MODIFIED" ->

3.4 Налаштування сервера

Д ля того, щоб серевер знав, в якому приміщенні в акті підставляти дані, він змушений цей акт проаналізувати. Аналізовані сервером документи називаються server-parsed документами.

В першу чергу треба дати усвідомити серверу, які документи він повинен аналізувати. Для цього в файл конігураціі (для Apache старих версій також NCSA web-серверів це файл srm.conf, але для нових версій Apache, наприклад 1.3.4 - httpd.conf), потрібно додати наступні параметри: Сервер Apache:

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

Сервер NCSA:

AddType text / x-server-parsed-html .shtml Зазначені параметри висловлюють про те, що всі файли з розширенням .shtml є server-parsed, також перед тим як "віддати" цей акт замовнику сервер повинен їх проаналізувати.

Навіщо вказувати окреме розширення для server-parsed документів?, - запитає допитливий читач. Відповідаємо. Звичайно, жодна людина не перешкоджає додати в файл конфігурації рядок

AddType text / x-server-parsed-html .html Однак це призведе до того, що сервер стане досліджувати всі документи з розширенням .html, навіть якщо в них немає виклику SSI, завантаження системи збільшитися, але продуктивність сервера знизиться.

Не слід забувати також про те, що безуспішно включати виклик SSI в CGI програми, оскільки їх укладення сервером не аналізується.

Для отримання більш детальної інформації по конфігурації вашого сервера на предмет використання SSI читайте документайію на ваш сервер.

додатки

Додаток 1. Змінні оточення сервера

Н іже наведено перелік основних змінних оточення сервера з короткими описом назначенія.В даному випадку сервер Apache 1.2.5 з модулем PHP / FI-2.0.1. Для інших веб-серверів (MS IIS, Netscape, NCSA httpd, також т.д.) змінні можуть відрізнятися.

REMOTE_HOST - ім'я хоста пріконнектівшегося до сервера. У разі роботи через проксі - ім'я проксі.
Приклад: REMOTE_HOST = lom.pvrr.ru

REMOTE_ADDR - IP адреса хоста пріконнектівшегося до сервера. У разі роботи через проксі - IP адреса проксі.
Приклад: REMOTE_ADDR = 194.87.186.11

REMOTE_PORT - номер порту клієнта.
Приклад: REMOTE_PORT = 3381

HTTP_USER_AGENT - ім'я / номер версії / і т.д. замовника (браузера). Використання цієї змінної іноді призводить до шаленство окремих користувачів Інтернет. :) Але на самому занятті дуже корисна річ. Наприклад для автовизначення російських кодувань.
Приклад: HTTP_USER_AGENT = Mozilla / 4.07 [en] (X11; I; FreeBSD 2.2.6-RELEASE i386)

HTTP_ACCEPT - типи даних, крім text / html, сприймаються клієнтом (браузером)
Приклад: HTTP_ACCEPT = image / gif, image / x-xbitmap, image / jpeg, image / pjpeg, image / png, * / *

HTTP_ACCEPT_CHARSET - які чарсета розуміє замовник (браузер).
Приклад: HTTP_ACCEPT_CHARSET = iso-8859-1, *, utf-8

HTTP_ACCEPT_LANGUAGE - які мови воспрінімвает замовник (браузер).
Приклад: HTTP_ACCEPT_LANGUAGE = nl, nl-BE, ru

* * *

SERVER_NAME - ім'я сервера відповідне записи IN A в DNS, або значення змінної ServerName (або схожою) в конфіги сервера.
Приклад: SERVER_NAME = arche.pvrr.ru

HTTP_HOST - ім'я сервера або віртуального хоста, до якого звертається клієнт. Значення HTTP_HOST може існувати рівним значенню SERVER_NAME.
Приклад: HTTP_HOST = www.pvrr.ru

SERVER_SOFTWARE - яке ПЗ використовується в якості сервера.
Приклад: SERVER_SOFTWARE = ​​Apache / 1.2.5 PHP / FI-2.0.1

DOCUMENT_ROOT - маршрут до "корені" веб-сервера від "кореня" файлової системи копьютера, на якому він працює.
Приклад: DOCUMENT_ROOT = / usr / local / www / html

HTTP_CONNECTION - тип з'єднання.
Приклад: HTTP_CONNECTION = keep-alive

SERVER_PROTOCOL - протокол, який використовується для обміну даними з конкретним клієнтом.
Приклад: SERVER_PROTOCOL = HTTP / 1.0

REQUEST_URI - ім'я запитуваного ресурсу / документа, що включає в себе шлях від кореня веб-сервера. При зверненні до кореня сервера або каталогу цієї змінної присвоюється ім'я каталогу або "/" в разі кореня сервера.
Приклад: 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