Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Специальные строки заголовка



Сервер распознает следующие строки заголовка в выходном потоке:

Content-Type:

Указывает на MIME тип тела сообщения. Значение этого параметра должно быть в формате type/subtype.

URI: < value> (value enclosed in angle brackets)

Данное значение указывает на полный URL или ссылку на локальный файл, сообщение из которого будет возвращено клиенту в теле сообщения. Если значение является локальным файлом, сервер отсылает его как результат запроса, как будто клиент воспользовался методом GET при генерации запроса. Если значение является полным URL, то сервер возвращает сообщение «401 redirect» для обеспечения прямой загрузки указанного объекта.

Location:

То же самое, что и URI, но данная форма сейчас не используется. Параметр value НЕ должен быть взят в угловые скобки.

Другие заголовки

Другие заголовки передаются клиенту в том виде, в котором они представлены.

Прямой возврат

Сервер позволяет конечному приложению осуществлять прямой возврат результата запроса клиенту. Это осуществляется посредством включение в заголовок возвращаемого сообщения его информационного протокола. Это позволяет CGI программам формировать непосредственный ответ клиенту с указанием HTTP заголовка без предварительной обработки его сервером.

Сервер анализирует результат запроса, помещаемый CGI программой в выходной файл (Output File), и, если первая строка «HTTP/1.0», он предполагает, что сообщение содержит полный HTTP ответ и отсылает его клиенту без упаковки.

Что такое CGI-скрипты?

Начнем с того, что ваш браузер (когда вы набрали URL ) соединяется по протоколу HTTP с указанным сервером и просит у него нужный файл, примерно так:

GET /~paaa/cgi-bin/guestbbok.cgi HTTP/1.0

Вот это самое главное в запросе.

Дальше идет посылаемая браузером информация о себе и о том, что более подробно ему надо (например: Accept: */*).

Если запрошен простой файл: например.html, то если такой файл есть, сервер отошлет браузеру ответ:

HTTP/1.0 200 Okay Content-Type: text/html < HTML> < BODY>

.......

< /BODY> < /HTML>

В ответе, состоящем из заголовка и тела, в заголовке содержится код возврата и информация о типе содержимого.

Далее после пустой строки (она нужна чтобы отделить заголовок от тела ) идет информация из самого документа, по заданному URL:

< HTML> < BODY>...

Вот в принципе и весь WWW — ходишь от ссылки к ссылке...

А что если нужно внести в этот унылый процесс что-нибудь по-настоящему интерактивное, динамическое, прекрасное и великолепное? Что ж, есть ответ и на этот вопрос. Если в запрашиваемом URL указать специальную программу ( CGI, программа Common Gateway Inteface Общего Шлюзового Интерфейса ) то, что эта программа выдаст, то и отправится браузеру...

Сервер запускает.cgi -программу, и она, например обработав данные формы, заносит вас куда-нибудь в свою базу данных, а вам сообщит, что вы большой молодец.

Что надо знать, чтобы писать CGI скрипты

Во-первых надо знать что такое Интернет и как он работает. Ну и чуть-чуть умения программировать (это самое главное).

Кроме того, если вы хотите изучать CGI, то вам нужен нормальный, полнофункциональный сервер. Если же вы сами являетесь системным администратором на своем сервере, то для вас, естественно нет проблем, ведь включить CGI для какой-нибудь директории — это просто подправить одну строчку в файле конфигурации сервера.

Простой скрипт

Сначала в своем домашнем каталоге создайте директорию cgi-bin:

cd public_html mkdir cgi-bin chmod 0777 cgi-bin

Последняя строчка будет очень важна. Возьмите редактор и наберите:

#! /usr/bin/perl

#first.cgi

print " Content-Type: text/html\n\n";

print " < HTML> < BODY> ";

print ”< H1> Hello you!!! < /H1> ”;

print ”< /BODY> < /HTML> ”;

Сохраните его в директории cgi-bin под именем first.cgi. Ну как, сохранили?

А теперь сделайте его исполняемым (ведь это — программа): chmod +x first.cgi

Итак, подходим к торжественному моменту — наберите в строке браузера

http: //www.ваш.сервер.ru/~ваш_логин/cgi-bin/first.cgi

и посмотрите что будет. Будет одно из двух: либо скрипт заработает, и вы увидите сгенерированную им страничку (поздравляю, в нашем полку прибыло! ), либо Internal Server Error — тогда не расстраивайтесь, вы что-то сделали не так.

Вам тогда пригодится пособие по ловле блох. Во-первых проверку синтаксиса можно осуществить следующим образом:

perl -с first.cgi

Perl вам сразу выдаст либо сообщения об ошибках (ну бывает, точку с запятой пропустили, скобочки или кавычки забыли закрыть...) это по ходу дела поправимо. Более грубо с логической точки зрения — это пропустить вывод пустой строки, которая отделяет заголовок от тела:

print " Content-Type: text/html\n\n"; #Все Правильно print " Content-Type: text/html\n"; #ОШИБКА!!! Разберем скрипт.

Первая строка #! /usr/bin/perl просто указывает, где в системе расположен компилятор Perl.

Обычно он находится /usr/bin/perl или /usr/local/bin/perl, выяснить это можно одной из команд which perl или whereis perl, ну или (что очень долго) запустить полный поиск: find / -name perl -print.

Вторая строка — это просто комментарий — вы можете тыкать что угодно после знака #, однако обычно во второй строке пишут название скрипта, что очень удобно.

Затем идет print «Content-Type: text/html\n\n»; Это заголовок, указывающий тип содержимого.

Все, что скрипт печатает в свой стандартный вывод STDOUT идет на обработку к серверу. Пустая строка отделяет заголовок от тела, которое в нашем случае представляет собой:

< HTML> < BODY> < H1> Hello you!!! < /H1> < /BODY> < /HTML>

Сервер обработает ответ скрипта и на базе него сформирует и пошлет браузеру ответ (сервер обычно не изменяет тела сообщения, он только дополняет заголовок нужными для работы протокола HTTP полями).

Ну вот, азы уже освоены, все не так трудно и удручающе, как могло показаться на первый раз.

Вы теперь можете сами потренироваться в написании таких вот простеньких скриптов, чтобы набить руку.

Переменные среды CGI

Предыдущий скрипт не содержал ничего особенно замечательного, так просто вываливал HTML текст, который благополучно отображался на экране браузера. Но по-настоящему мощь придает CGI возможность обработки параметров, которые переданы скрипту. Например вы можете набрать:

http: //www.somehost.ru/somedir/cgi-bin/my_cgi.cgi? param=value

То есть вы хотите, чтобы скрипт my_cgi.cgi обработал для вас параметр param со значением value, или когда вы заполнили запрос, например в форме yahoo или altavista.

Ну это с точки зрения пользователя...

А на сервере при запуске CGI -скрипта сервер формирует среду окружения, в которой скрипт может найти всю доступную информацию о HTTP -соединении и о запросе.

Вот эти переменные:

REQUEST_METHOD

Это одно из самых главных полей, используемое для определения метода запроса HTTP Протокол HTTP использует методы GET и POST для запроса к серверу.

Они отличаются тем, что при методе GET запрос является как бы частью URL, т.е.

http: //www..../myscript.cgi? request

А при методе POST данные передаются в теле HTTP -запроса (при GET тело запроса пусто), и следовательно для CGI тоже есть различие: при GET запрос идет в переменную QUERY_STRING, а при POST подается на STDIN скрипта.

Пример: REQUEST_METHOD=GET

QUERY_STRING

Это строка запроса при методе GET.

Вам всем известно, что запрос из формы кодируется браузером, поскольку не все символы разрешены в URL некоторые имеют специальное назначение.

Теперь о методе urlencode. Неплохо бы чисто формально напомнить, что все пробелы заменяются в URL на знак «+», а все специальные и непечатные символы на последовательность %hh, где hh — шестнадца-теричный код символа, разделитель полей формы знак «& », так что при обработке форм надо произвести декодирование.

Пример:

QUERY_STRING= name=quake+doomer& age=20& hobby=games

CONTENT_LENGTH

Длина в байтах тела запроса. При методе запроса POST необходимо считать со стандартного входа STDIN CONTENT_LENGTH байт, а потом производить их обработку.

Обычно методом POST пользуются для передачи форм, содержащих потенциально большие области ввода текста TEXTAREA.

При этом методе нет никаких ограничений, а при методе GET существуют ограничения на длину URL.

Пример: CONTENT_LENGTH=31

CONTENT_TYPE

Тип тела запроса. Для форм, кодированных выше указанным образом он

application/x-www-form-urlencoded

GATEWAY_INTERFACE

Версия протокола CGI.

Пример: GATEWAY_INTERFACE=CGI/1.1

REMOTE_ADDR

IP-Адрес удаленного хоста, делающего данный запрос.

Пример: REMOTE_ADDR=139.142.24.157

REMOTE_HOST

Если запрашивающий хост имеет доменное имя, то эта переменная содержит его, в противном случае — тот же самый IP-адрес, что и REMOTE_ADDR.

Пример: REMOTE_HOST=idsoftware.com

SCRIPT_NAME

Имя скрипта, использованное в запросе. Для получения реального пути на сервере используйте SCRIPT_FILENAME.

Пример: SCRIPT_NAME=/~paaa/guestbook.cgi

SCRIPT_FILENAME

Имя файла скрипта на сервере.

Пример:

SCRIPT_FILENAME=/home/p/paaa/public_html/cgi-bin/ guestbook.cgi

SERVER_NAME

Имя сервера. Чаще всего доменное, как www.microsoft.com, но в редких случаях за неимением такового может быть IP-адресом, как 157.151.74.254.

Пример: SERVER_NAME=www.uic.nnov.ru

SERVER_PORT

TCP-Порт сервера. Используется для соединения. По умолчанию HTTP-порт 80, хотя может быть и другим.

Пример: SERVER_PORT=80

SERVER_PROTOCOL

Версия протокола сервера.

Пример: SERVER_PROTOCOL=HTTP/1.1

SERVER_SOFTWARE

Программное обеспечение сервера.

Пример: Apache/1.0

AUTH_TYPE, REMOTE_USER

Эти переменные определены в том случае, когда запрошенный ресурс требует аутентификации пользователя.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-03; Просмотров: 556; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.027 с.)
Главная | Случайная страница | Обратная связь