Передача данных шлюзу осуществляется в следующем формате:
имя=значение&имя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