Немного о HTTP, методов GET и POST.

Немного об HTTP, методах GET и POST.

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

Немного о HTTP

Сервер принимает три типа запросов: GET, POST и HEAD. Запрос программы к Web-серверу выглядит следующим образом:

GET /index.html HTTP/1.0

Первая часть, в данном случае GET, - это метод запроса,
вторая, index.html, - запрашиваемый URL,
третья, HTTP/1.0, - протокол, используемый клиентом.

Два основных метода запроса - это GET и POST. Это те самые методы которые доступны вам при создании формы. Метод HEAD редко используется броузером, поскольку он запрашивает только заголовок ответа, а тело ответа в таком случае не передается. Например, для проверки того, не изменилась ли страница, броузер может запросить заголовок, но при этом не порождается полноценный обмен данными.

Метод GET

По умолчанию при запросе используется метод GET. Метод POST используется только тогда, когда это явно указано в запросе формы. Для CGI-программиста очень важно понимать, что при запросе методом GET данные формы передаются серверу вместе с URL. Web-серверы, поддерживающие CGI, копируют эти данные в переменную окружения с именем QUERY_STRING. После этого забота о получении данных из переменной окружения и их обработке возлагается на CGI-программу.

URL со строкой запроса выглядит так:

http://www.domen-name.com/login.pl?nick=maks&psw=parol

Знак ? отделяет строку запроса от собственно URL ресурса; nick и psw - переменные передаваемые серверу, maks и parol - их значения соответственно.

Метод POST

Метод POST используется тогда, когда это явно указано в атрибуте формы METHOD. В отличии от метода GET, POST помещает данные не в URL, а в тело запроса. Запрос POST во многом похож на ответ HTTP. Первая строка представляет собой стандартный запрос HTTP, в котором указан метод POST. В ней могут быть необходимые дополнительные заголовки, отделяемые от тела запроса пустой строкой.

Тело запроса при использовании метода POST передается программе как стандартный поток ввода.

Выбор между GET и POST

Понятно, что при разработке форм перед CGI-программистом встанет вопрос: какой из этих методов применять. В большинстве случаев применимы оба метода и оба будут хорошо работать. Однако бывают ситуации, когда использование того или иного метода дает определенные преимущества.

Рассмотрим несколько ситуаций, когда есть смысл предпочесть метод GET или POST.