Общешлюзовой интерфейс CGI

  • ppt
  • 11.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 123. Общешлюзовой интерфейс CGI.ppt

Общешлюзовой интерфейс CGI

Common Gateway Interface

Web-сервер
Apache

Common Gateway Interface

CGI-скрипт

данные

Тег для разметки формы

элементы формы кнопка Submit

action – определяет URL скрипта, которому передаются данные, внесенные в форму
method – определяет способ, которым данные передаются от клиента серверу (get – значение по умолчанию)

Методы передачи данных

GET CGI-скрипт получает данные из формы через переменную окружения QUERY_STRING
POST CGI-скрипт получает данные из формы через стандартный поток ввода

Переменные окружения environment variables

Основные
AUTH_TYPE содержит тип аутентификации, который применяется сервером
CONTENT_LENGTH количество байт данных, которое CGI-скрипт получает от браузера
CONTENT_TYPE media-тип данных запроса
GATEWAY_INTERFACE версия интерфейса CGI

Переменные окружения environment variables

PATH_INFO путь к виртуальному каталогу, в котором находится cgi-скрипт
PATH_TRANSLATED физический путь к каталогу, в котором находится cgi-скрипт
QUERY_STRING строка параметров, указанная в URL после знака ?
REMOTE_ADDR IP-адрес клиента

Переменные окружения environment variables

REMOTE_HOST DNS-имя клиента, если эта информация недоступна, то значение совпадает с REMOTE_ADDR
REQUEST_METHOD метод передачи данных, который используется клиентом
SCRIPT_NAME путь к виртуальному каталогу и имя cgi-скрипта


Переменные окружения environment variables

SERVER_NAME доменное имя или IP-адрес сервера
SERVER_PROTOCOL имя и версия протокола, используемого для выполнения запросов
SERVER_PORT номер порта браузера
SERVER_SOFTWARE имя и версия программного обеспечения сервера

Переменные окружения environment variables

Дополнительные
HTTP_ACCEPT media-типы данных, которые могут быть приняты клиентом
HTTP_ACCEPT_ENCODING методы кодирования, которые может использовать браузер для формирования запроса серверу
HTTP_ACCEPT_LANGUAGE идентификатор предпочтительного языка браузера

Переменные окружения environment variables

HTTP_COOKIE cookie, присылаемые браузером
HTTP_FROM имя пользователя в формате e-mail
HTTP_HOST DNS-имя хоста, на котором работает сервер
HTTP_REFERER имя документа, который инициирован работу cgi-скрипта
HTTP_USER_AGENT имя браузера

Проверка работы CGI

Файл hellocgi.cpp
#include void main () { cout<<"Content-type: text/html\n\n"; cout<<"Этот HTML-документ динамически создан CGI- модулем"; }

Проверка работы CGI

Файл d:\infocom\Apache2.2\cgi-bin\hellocgi.exe
ScriptAlias /cgi-bin/ "d:/infocom/Apache2.2/cgi-bin/"

Просмотр переменных окружения

GET Посмотреть переменные окружения

POST

Просмотр переменных окружения

#include #include void main() { cout<<"Content-type: text/html\n\n"; cout<<"

Environment Variables

"; cout<<"
REQUEST_METHOD="<QUERY_STRING="<"; }

Просмотр переменных окружения

GET Посмотреть переменные окружения

POST

Просмотр переменных окружения

#include #include void main() { cout<<"Content-type: text/html\n\n"; cout<<"

Environment Variables

"; cout<<"
REQUEST_METHOD="<CONTENT_LENGTH="<CONTENT_TYPE="<"; };

Заголовок Location

Page1
Page2

Заголовок Location

#include #include void main () { char query_string[80]; query_string=getenv("QUERY_STRING"); if (strstr(query_string, "page1")!=NULL) cout<<"Location: http://localhost/page1.htm\n\n"; if (strstr(query_string, "page2")!=NULL) cout<<"Location: http://localhost/page2.htm\n\n"; if ((strstr(query_string, "page1")==NULL) && (strstr(query_string, "page2")==NULL)) cout<<"Location: /error.htm\n\n"; }

Возврат графического файла

Графический формат XBM
Файл nil.xbm
#define nil_width 8 #define nil_height 12 static char nil_bits[] {0x00,0x3C,0x42,0x42, 0x42,0x42,0x42,0x42, 0x42,0x42,0x3C,0x00}

Возврат графического файла

#include void main () { cout<<"Content-type: image/x-xbitmap\n\n"; cout<<"#define nil_width 8\n"; cout<<"#define nil_height 12\n"; cout<<"static char nil_bits[] {\n"; cout<<"0x00,0x3C,0x42,"; cout<<"0x42,0x42,0x42,"; cout<<"0x42,0x42,0x42,"; cout<<"0x42,0x3C,0x00}"; }

Полный ответ сервера

Файл nph-an2.cpp #include void main () { cout<<"HTTP/1.1 200 OK\n"; cout<<"Content-type: text/html\n\n"; cout<<" This is a full answer!\n"; }

Установка cookie

Файл nph-test.cpp #include void main() { cout<<"HTTP/1.1 200 OK\n"; cout<<"Set-Cookie: Cook=hello; expires=Mon, 9-Apr-2008 00:00:00 GMT\n"; cout<<"Content-type: text/plain\n\n"; cout<<"Cookies have come!\n"; }

Полный ответ сервера

Файл nph-an.cpp #include void main () { cout<<"Content-type: text/html\n\n"; cout<<" This is full answer!\n"; }

Внутренняя ошибка сервера

Файл nph-error.cpp #include void main () { cout<<"HTTP/1.0 500 Server Error\n\n"; }

Аутентификация

#include void main() { cout<<"HTTP/1.1 401 Unauthorized\n"; cout<<"WWW-Authenticate: basic realm=TestRealm\n\n"; }

Перенаправление

#include void main() { //cout<<"HTTP/1.1 301 Moved Permanently\n"; cout<<"HTTP/1.1 302 Moved Temporary\n"; cout<<"Location: http://localhost/res.html\n\n"; }

Передача данных формы

Передача данных формы



Новосибирск Омск
Новосибирск Омск

Передача данных формы





Передача данных формы



Передача данных формы

http://localhost/cgi-bin/viewenv.exe? city1=Novosibirsk& city2=%CD%EE%E2%EE%F1%E8%E1%E8%F0%F1%EA& city3=%CD%EE%E2%EE%F1%E8%E1%E8%F0%F1%EA& city4=%CE%EC%F1%EA& password=12345& hidden=%D2%E0%E9%ED%E0& file=C%3A%5CWINDOWS%5C0.log& cities1=String1%0D%0AString2& cities2=%CD%EE%E2%EE%F1%E8%E1%E8%F0%F1%EA& cities3=%CC%EE%F1%EA%E2%E0& cities3=%C2%EB%E0%E4%E8%E2%EE%F1%F2%EE%EA& submit=%CF%EE%E4%E0%F7%E0+%E7%E0%EF%F0%EE%F1%E0

Передача данных формы

Environment Variables
QUERY_STRING=city1=Novosibirsk&city2=%CD%EE%E2%EE%F1%E8%E1%E8%F0%F1%EA&city3=%CD%EE%E2%EE%F1%E8%E1%E8%F0%F1%EA&city4=%CE%EC%F1%EA&password=12345&hidden=%D2%E0%E9%ED%E0&file=C%3A%5CWINDOWS%5C0.log&cities1=String1%0D%0AString2&cities2=%CD%EE%E2%EE%F1%E8%E1%E8%F0%F1%EA&cities3=%CC%EE%F1%EA%E2%E0&cities3=%C2%EB%E0%E4%E8%E2%EE%F1%F2%EE%EA&submit=%CF%EE%E4%E0%F7%E0+%E7%E0%EF%F0%EE%F1%E0

Четыре информационных потока CGI

Клиент

Web-сервер

CGI-модуль

HTTP запрос

HTTP ответ

Входной поток

Переменные
окружения

Аргументы
командной
строки

Выходной поток

Аргументы командной строки

Ссылка


Аргументы командной строки

Аргументы командной строки

#include void main(int argc, char * argv[]) { cout<<"Content-type: text/html\n\n"; cout<<"argc="<"; for (int i=0; i"; }

Аргументы командной строки