CGI. Параметры среды.

Как известно, одна из основных функций CGI-программирования - это обработка параметров, которые ему переданы. Например, если мы наберем следующее:
http:://www.somehost.ru/somedir/cgi-bin/my_cgi.cgi?param=value ,
то это будет означать, что мы хотим, чтобы скрипт my_cgi.cgi обработал параметр param со значением value.

Так все выглядит с точки зрения пользователя... А сервер при запуске скрипта формирует среду окружения , в которой скрипт может найти всю доступную информацию о HTTP-соединении и о полученных в запросе параметрах.

Большинство переменных CGI стандартизованы. Однако каждый новый сервер может определять свои дополнительные переменные. Вот стандартные переменные CGI-окружения:

REQUEST_METHOD Метод запроса HTTP. Протокол HTTP использует для запроса к серверу методы GET и POST. Они отличаются тем, что в методе GET запрос является частью URL, а при использовании метода POST данные передаются в теле HTTP-запроса. Соответственно, для CGI тоже есть различие: при GET запрос идет в переменную QUERY_STRING, а при POST подается на стандартный ввод скрипта - STDIN
Пример: REQUEST_METHOD=GET
QUERY_STRING Это строка запроса при методе GET. Запрос отправляемый из формы, кодируется браузером, поскольку не все символы разрешены в URL. В URL все пробелы заменяются на знак +, а все специальные символы на последовательность %hh, где hh - шестнадцетиричный код символа. Кроме того, разделителем полей формы является знак &, так что при обработке форм надо производить декодирование.
Пример: QUERY_STRING= name=Ivanov+Ivan&age=50
CONTENT_LENGTH Длина тела запроса в байтах. При методе запроса POST необходимо считать со стандартного входа (STDIN) CONTENT_LENGTH байт, а потом производить их обработку.
Пример: CONTEN_LENGTH= 31
CONTENT_TYPE Тип тела запроса (для форм кодированных вышеуказанным методом, тип определяется как application/x-www-form-urlencoded)
GATE_INTERFACE Версия протокола CGI.
Пример: GATE_INTERFACE= CGI/1.1
REMOTE_ADDR IP-адрес удаленного хоста, делающего запрос.
Пример: REMOTE_ADDR=139.142.24.157
REMOTE_HOST Если запрашиваемый хост имеет доменное имя, то эта переменная содержит его, в противном случае это тот же самый IP-адрес, что и REMOTE_ADDR.
Пример: REMOTE_HOST=somehost.com
SCRIPT_NAME Имя скрипта (виртуальное), использованное в запросе. Для получения реального пути на сервере используйте переменную SCRIPT_FILENAME
Пример: SCRIPT_NAME= /~pvg/guestbook.cgi
SCRIPT_FILENAME Имя файла скрипта на сервере. Используя эту переменную вы получаете именно физический путь к файлу. Таким образом, файл можно использовать.
Пример: SCRIPT_FILENAME= /home/pvg/cgi-bin/guestbook.cgi
SERVER_NAME Имя сервера, чаще всего доменное, но в редких случаях за неимением такого оно может быть IP-адресом.
Пример: SERVER_NAME= www.my.com
SERVER_PORT TCP-порт сервера, используемый для соединения. По умолчанию HTTP-порт имеет номер 80, хотя в некоторых случаях он может быть и другим.
Пример: SERVER_PORT=80
SERVER_PROTOCOL Версия протокола сервера
Пример: SERVER_PROTOCOL=HTTP/1.1
SERVER_SOFTWARE Программное обеспечение сервера.
Пример: SERVER_SOFTWARE = Apache/1.0
AUTH_TYPE
REMOTE_USER
Эти переменные определены в том случае, когда запрошенный ресурс требует аутентификации пользователя.