Шаг 2 - Передача данных шлюзу

Передача данных шлюзу осуществляется в следующем формате:

имя=значение&имя1=значение1&... 

Здесь "имя" это название параметра, а "значение" его содержимое. Методов передачи данных в таком формате существует два - GET и POST. При использовании метода GET данные передаются серверу вместе с URL:

http://.../cgi-bin/test.cgi?имя=значение&имя1=значение1&...

При использовании метода POST данные посылаются внутри самого HTTP запроса.

Так как длина URL ограничена, то методом GET нельзя передать большой объем данных, а метод POST обеспечивает передачу данных не ограниченных по длинне.

Получение данных самим скриптом также различается. При использовании метода GET данные следующие за "?" помещаются в переменную среды QUERY_STRING. При использовании POST содержимое запроса перенаправляется в стандартный поток ввода, т.е. в stdin.

Чтобы шлюз мог узнать какой метод используется для передачи данных, сервер создает переменную среды REQUEST_METHOD, в которую записывает GET или POST.

В имена и значения параметров при передаче кодируются браузером URL методом, т.е. все символы не принадлежащие к латинскому алфавиту и числам кодируются в виде %HH, где HH - шестнадцатеричное значение кода символа. Также кодируются все символы , которые нельзя использовать, т.е. !#%^&()=+ и пробел. Символ "&" используется, как мы уже видели для разделения пар "имя=значение", "=" используется в парах "имя=значение", "%" для кодирования символов, "пробел" кодируется символом "+"(плюс), сам же плюс кодируется через "%", и т.д. Поэтому при анализе полученных данных требуется их переводить в нормальных вид.

Пример кодировки символов и букв при передаче:

Передается строка: !@#$%^&*()-=_+ абвгд
Скрипт получает  : %21@%23%24%25%5E%26*%28%29-%3D_%2B+%E0%E1%E2%E3%E4

Размер передаваемых данных методом POST содержится в переменной окружения CONTENT_LENGTH:

Передается : a=4&b=1
CONTENT_LENGTH = 7

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Кузин Андрей.