CGI. Способы передачи данных. Запоминание состояния.




CGI - (Common Gateway Interface - общий шлюзовой интерфейс) это набор правил, согласно которым программы на сервере могут через веб-сервер посылать данные клиентам. Формы расширяют эту возможность, позволяя клиенту посылать данные для CGI-программы.

Есть четыре способа, которыми CGI передает данные между CGI-программой и веб-сервером, а следовательно, и клиентом Web:

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

· Командная строка;

· Стандартное устройство ввода;

· Стандартное устройство вывода.

С помощью этих четырех методов сервер пересылает все данные, переданные клиентом, CGI-программе. Затем CGI-программа делает свое дело и пересылает выходные данные обратно серверу, который переправляет их клиенту.

Переменные окружения Когда сервер выполняет CGI-программу, то прежде всего передает ей некоторые данные для работы в виде переменных окружения. В спецификации официально определены семнадцать переменных, но неофициально используется значительно больше - с помощью механизма, называемого HTTP_mechanism. CGI-программа имеет доступ к этим переменным так же, как и к любым переменным среды командного процессора при запуске из командной строки. В сценарии командного процессора, например, к перем окруж FOO можно обращаться как $FOO; в Perl - $ENV{'FOO'}; в С - getenv("FOO"); и т. д.

Некоторые переменные окружения:

CONTENT LENGTH Длина данных, переданных методами POST или PUT, в байтах

CONTENT_TYPE Тип MIME данных, присоединенных с помощью методов POST или PUT.

GATEWAY_INTERFACE Номер версии спецификации CGI, поддержива­емой сервером.

PATH_INFO Дополнительная информация пути, переданная клиентом. Например, для запроса https://www.myserver.com/test.cgi/this/is/a/path?field=green значением переменной РАTH_INFO будет /this/is/a/path.

QUERY_STRING Все данные, следующие за символом «?» в URL. Это также данные, передаваемые, когда REQUEST_METOD формы есть GEТ.

REMOTE_ADDR IP-адрес клиента, делающего запрос.

REMOTE_HOST Имя узла машины клиента, если оно доступно.

REQUEST_METHOD Метод, используемый клиентом для запроса. Для CGI-программ, которые мы собираемся создавать, это обычно будет POST или GET.

SCRIPT_NAME Путь к выполняемому сценарию, указанный клиентом. Может использоваться при ссылке URL на самого себя, и для того, чтобы сценарии, ссылки на которые существуют в разных мес­тах, могли выполняться по-разному в зависимости от места.

SERVER_NAME Имя узла - или IP-адрес, если имя недоступно, машины, на которой выполняется веб-сервер.

SERVER_PORT Номер порта, используемого веб-сервером.

SERVER_PROTOCOL Протокол, используемый клиентом для связи с сервером (обыч. HTTP)

SERVER_SOFTWARE Данные о версии веб-сервера, выполняющего CGI-программу.

Все эти переменные могут быть использованы и даже изменены CGI-программой. Но эти изменения не затрагивают веб-сервер, запустивший программу.

Помимо этих переменных данные, возвращаемые клиентом в заголовке запроса, присваиваются переменным вида HTTP_FOO, где FOO - имя заголовка. Например, большинство веб-броузеров включает данные о версии в заголовок с именем USER_AGENT. Ваша CGI-программа может получить эти данные из переменной HTTP_USER_AGENT.

Командная строка. CGI допускает передачу CGI-программе аргументов в качестве параметров командной строки, которая редко используется. Суть в том, что если переменная окружения QUERY_STRING не содержит символа «= », то CGI-программа будет выполняться с параметрами командной строки, взятыми из OUERY_STRING. https://www.myseruer.com/cgi-bin/finger?root запустит finger root на www.myserver.com.

Параметры командной строки чаще всего используются вместе с тегом HTML <ISINDEX>. Тег <ISINDEX> обозначает миниформу, содержащуюся в одном теге. Обнаружив тег <ISINDEX>, броузер выводит окно, в которое пользователь может ввести текст запроса. При подаче запроса (нажатии пользователем клавиши «Enter»), броузер извлекает URL из тега <ISINDEX> и обращается к нему, передавая текст запроса в качестве командной строки.


Стандартное устройство ввода. Eсли клиент использует для передачи информации HTTP-методы PUT или POST, длина и тип MIME этих данных помещаются в переменные CONTENT_LENGTH и CONTENT_TYPE соответственно. Передаваемые данные посылаются на стандартное устройство ввода CGI-программы. Признак конца данных может не посылаться программе, поэтому она должна взять значение переменной CONTENT_LENGTH и прочесть столько байтов, сколько в ней указано

Стандартное устройство вывода. Данные, посылаемые CGI-программой на стандартное устройство вывода, читаются веб-сервером и отправляются клиенту. Если имя сценария начинается с nph-, то данные посылаются прямо клиенту без вмешательства со стороны веб-сервера. В этом случае CGI-программа должна сформировать правильный заголовок HTTP, который будет понятен клиенту. В противном случае веб-сервер сам формирует HTTP-заголовок.

В любом случае, серверу нужно дать одну директиву, которая сообщит ему сведения о вашей выдаче. Обычно это HTTP-заголовок Content-Type, но может быть и заголовок Location. За заголовком должна следовать пустая строка, то есть перевод строки или комбинация CR/LF.

Заголовок Content-Type сообщает серверу, какого типа данные выдает CGI-программа. Если это страница HTML, то строка должна быть «Content-Type: text/html». Заголовок Location сообщает серверу другой URL или другой путь на том же сервере, куда нужно направить клиента. Заголовок должен иметь следующий вид: «Location: https:// www.myserver.com/another/place/».

После заголовков HTTP и пустой строки можно посылать собственно данные, выдаваемые вашей программой - страницу HTML, изображение, текст или что-либо еще.

Запоминание состояния.

HTTP является так называемым протоколом «без памя­ти». Это значит, что клиент посылает данные серверу, сервер возвращает данные клиенту, и дальше каждый идет своей дорогой. Сервер не сохраняет о клиенте данных, которые могут понадобиться в последующих операциях. Аналогично, нет уверенности, что клиент сохранит о совершенной операции какие-либо данные, которые можно будет использовать позднее. Всякий раз, когда запрос достигает программы CGI, это совершенно новый экземпляр программы, не имеющий связи с предыдущим.

Cookies. В части клиента с появлением Netscape Navigator появилось выглядящее наспех сделанным решение под названием cookies. Оно состоит в создании нового HTTP-заголовка, который можно пересылать туда-сюда между клиентом и сервером, похожего на заголовки Content-Type и Location. Броузер клиента, получив заголовок cookie, должен сохранить в cookie данные, а также имя домена, в котором действует этот соokie. После этого всякий раз при посещении URL в пределах указанного домена заголовок cookie должен возвращаться серверу для использования в CGI-программах на этом сервере. Метод cookie используется в основном для хранения идентификатора пользователя. Сведения о посетителе можно сохранить в файле на сервере. Уникальный ID этого пользователя можно послать в качестве cookie броузеру пользователя, после чего при каждом посещении сайта пользователем броузер автоматически посылает серверу этот ID. Сервер передает ID программе CGI, которая открывает соответствующий файл и получает доступ ко всем данным о пользователе. Все это происходит незаметно для пользователя.

Несмотря на всю полезность этого метода, большинство сайтов не использует его в качестве единственного средства запоминания состояния. Для этого есть ряд причин. Во-первых, не все броузеры поддерживают cookie. Во-вторых, что более важно, cookie привязывают пользователя к определенной машине. Одним из великих достоинств Web является то, что она доступна из любой точки света. Независимо от того, где была создана или где хранится ваша веб-страница, ее можно показать с любой подключенной к Интернет машины. Однако если вы попытаетесь получить доступ к поддерживающему cookie сайту с чужой машины, все ваши персональные данные, поддерживавшиеся с помощью cookie, будут утрачены.

Использование интерфейса в стиле «имя регистрации/пароль». Страница содержит форму, в которую пользователь вводит имя регистрации и пароль, присвоенные ему при первом посещении сайта.

Использование hidden-поля в форме. ID пользователя можно пересылать через поле hidden.

Сохранение идентификатора сеанса (с использованием URL).

Идентификатор сеанса можно добавить к адресу URL. (в конец ссылки, аналогично параметру GET): <А HREF="link.php?<?=SID?>">

Использование переменных сеанса. Зарегистрировать ID пользователяв переменной сеанса.

А затем проверять зарегистрирована ли переменная.

 




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: