среда, 21 февраля 2007 г.

О методах POST и GET

Рассмотрим любимый вопрос нанимателей от Web-разработки: чем различаются методы GET и POST.
Для начала, что происходит в момент нажатия кнопки «Переход» в браузере или «Submit» на форме?
А происходит следующее: программа-браузер формирует и передает серверу специальный запрос, в соответствии с протоколом http.

Первая строка (стартовая) указывает команду. Она имеет следующий вид:
‹Метод› ‹URI› HTTP/‹Версия›
Метод определяет выполняемую на сервере команду.

OPTIONS
Возвращает методы HTTP, которые поддерживаются сервером. Этот метод может служить для определения возможностей веб-сервера.
GET
Запрашивает содержимое указанного ресурса.
HEAD
Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Это полезно для извлечения мета-информации, заданной в заголовках ответа, без пересылки всего содержимого.
POST
Передаёт пользовательские данные (например из формы HTML) заданному ресурсу. Данные включаются в тело запроса.
PUT
Загружает указанный ресурс на сервер.
DELETE
Удаляет указанный ресурс
TRACE
Возвращает полученный запрос так, что клиент может увидеть, что промежуточные сервера добавляют к запросу или изменяют его
CONNECT
Для использования вместе с прокси-серверами, которые могут динамически переключаться в туннельный режим SSL.

Чаще всего используются методы GET и POST. Об их сходстве и различии - чуть ниже.
После стартовой строки следует ряд заголовков. Например:
Host: www.mail.org
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Connection: close


Один из наиболее "применяемых" заголовков - Content-Type: multipart/form-data;, необходим для форм закачки файлов на сервер.

Все эти заголовки определены в спецификации http.

Потом идут 2 подряд символа \r\n и тело запроса, содержащее например параметры запроса, если используется метод POST и загружаемые через форму файлы.

Теперь подробнее про наш главный вопрос - сходство и различие GET и POST.
Различаются они тем, что в методе GET данные запроса внедряются в URL ресурса (после вопросительного знака, например: http://server/document.html?param=value), а в методе POST они посылаются в теле сообщения.
Каждый из методов имеет свои плюсы и минусы.
Так URI формы вызываемой методом GET более нагляден, его можно занести в закладки.
Зато метод POST позволяет передавать на сервер большие объемы данных (например файлы).
С точки зрения CGI-приложения на сервере.
В приложении вызываемом методом GET параметры формы доступны через переменную окружения.
Основные переменные в данном случае будут:
REQUEST_URI - URI запроса
QUERY_STRING - сохраняется значение параметров
REQUEST_METHOD— ключевое слово GET.

В приложении вызываемом через POST данные формы (е же файлы) подаются сервером на STDIN обработчика.

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