Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Специальные строки заголовка
Сервер распознает следующие строки заголовка в выходном потоке: 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; Нарушение авторского права страницы