вторник, 28 октября 2008 г.

Common Gateway Interface и формат HTTP-запроса

CGI=Common Gateway Interface - это набор соглашений для веб-приложений.

формат HTTP-запроса

GET script.php?param HTTP1.0\n
... other info ...
\n\n

Переменные окружения (Environment Variables)
REQUEST_URI
QUERY_STRING
REQUEST_METHOD

URL=Universal Resource Locator (i.e. example.com:80/somepath/script.php?param )
URI=Universal Resource Identifier (i.e. somepath/script.php?param )

Формат HTTP-запроса методом GET
GET script.php?param HTTP1.0
здесь
QUERY_STRING = param
REQUEST_METHOD = GET

Формат HTTP-запроса методом POST
POST script.php?param HTTP1.0
здесь
QUERY_STRING = param
REQUEST_METHOD = POST
Отличие от запроса методом GET в том, что параметры param могут передаваться не только через коммандную строку, но и в самом конце после всех заголовков.

CONTENT_TYPE (переменная окружения)
Content-Type: application/x-www-form-urlencoded (используется методами GET и POST)
либо
Content-Type: mulipart/form-data
Сервер не интерпретирует заголовок, а передает его скрипту (=сценарию) через переменную окружения.

HTTP_HOST - эта переменная окружения присутствует в протоколе HTTP 1.1
Host: имя_хоста
HTTP_HOST=/=SERVER_NAME в общем случае
Но HTTP_HOST=SERVER_NAME в частном случае, когда в конфигурации сервера Apache указано UseCanonicalName off с тем отличием, что SERVER_NAME не содержит номера порта.

HTTP_USER_AGENT
User-Agent: Firefox/3.0 [en] (WinNT5.1)
сообщает версию браузера и операционки + язык

HTTP_REFERER
Referer: URL
передает адрес веб-сайта, с которого осуществляется переход. Эта переменная подвержена манипуляции.

CONTENT_LENGTH
Content-length: длина
используется в случае метода POST и содержит длину данных в байтах в десятичном формате. Если используется метод GET, то значение пусто и данный заголовок не применяется.

HTTP_COOKIE
Cookie: значения_cookie (в URL-формате)

HTTP_ACCEPT
Accept: text/html, text/plain, image/jpeg ( либо */* )
браузер сообщает какие типы данных он понимает

Можно послать запрос через telnet в формате HTTP-протокола, вводя руками
telnet blogger.com 80
GET index.html HTTP/1.1
Host: blogger.com
после каждой строки нажимать клавишу Enter, а после последней два раза Enter (эквивалентно n\n\ в HTTP-протоколе).
Тогда можно видеть не только html-код страницы, но и информацию о дате последнего изменения страницы а также на какой машине расположен хост.
В частности таким образом можно узнать, что народный хостинг "не за деньги" (а не бесплатный) narod.ru от компании Яндекс работает на машинах ZX_Spectrum/1997 (Sinclair_BASIC).

Кодировка URL
Поскольку в случае использования метода GET данные передаются через адресную строку браузера, то они передаются в т.н. URL-кодировке, которая представляет собой 1-байтную кодировку наподобие ASCII. Буквы иных кроме английского алфавитов кодируются в шестнадчатеричном формате с предшествующим символом %: %3C

Комментарии: 0:

Отправить комментарий

Подпишитесь на каналы Комментарии к сообщению [Atom]

<< Главная страница