Розрізняють два типи запитів до CGI-скриптів: за методом GET і за методом POST. У свою чергу ці типи підрозділяються на запити за типами кодування:
· GET
o IsIndex
o form-urlencoded
· POST
o multipart/form-data
o form-urlencoded.
У запиті за методом GET дані від клієнта передаються скрипту у змінній оточення QUERY_STRING.
У запиті за методом POST дані від скрипта передаються у потоці стандартного вводу скрипта. При передачі через потік стандартного вводу у змінній оточення CONTENT_LENGTH вказується число переданих символів.
Запит типу isindex - це запит виду:
http://intuit.ru/somthing-cgi/cgi-script?word1+word2+word3
Головним тут є список слів після символу "?". Слова перераховуються через символ "+" і для кирилиці в шістнадцяткові послідовності не кодуються. Послідовність слів після символу "?" буде розміщена у змінній оточення QUERY_STRING.
Запит типу form-urlencoded - це запит виду:
http://intuit.ru/somthing-cgi/cgi-script?field=word1&field2=word2
Дані форми записуються у вигляді пар "ім'я_поля-значення", які розділені символом "&".
Наведений приклад - це звернення до скрипту за методом GET. Усі символи після "?" потраплять у змінну оточення QUERY_STRING. При цьому, якщо у значеннях полів з'являється кирилиця або спеціальні символи, то вони замінюються шістнадцятковим кодом символу, який слідує за символом "%".
При зверненні до скрипта за методом POST дані після символу "?" не будуть розміщатися в QUERY_STRING, а будуть спрямовані у потік стандартного вводу скрипта. У цьому випадку кількість символів у потоці стандартного вводу скрипта буде вказано у змінній оточення CONTENT_LENGTH.
При запиті типу multipart/form-data застосовується складене тіло HTTP-повідомлення: дані, введені у формі, і дані приєднаного зовнішнього файлу. Це тіло поміщається у потік стандартного вводу скрипта. При цьому до даних форми застосовується кодування, як у form-urlencoded, а дані зовнішнього файлу передаються як є.