HTTP POST Запросы требуют нескольких передач? - PullRequest
2 голосов
/ 26 февраля 2010

Я нашел цитируемый текст в Программировании Python 3-е издание Марка Лутца из главы 16: «Сценарии на стороне сервера» (стр. 987):

Формы также включают параметр метода для указания стиля кодирования, который будет использоваться для отправки данных через сокет на компьютер целевого сервера. Здесь мы используем стиль записи , который связывается с сервером, а затем отправляет ему поток пользовательских данных в отдельной передаче . Альтернативное получение стиля отправляет входную информацию на сервер за один шаг передачи , добавляя пользовательские вводы в конец URL-адреса, используемого для вызова скрипта, обычно после? персонаж (подробнее об этом скоро).

Я прочитал это с некоторой загадкой. Насколько я знаю, данные сообщений отправляются в той же передаче, что и часть того же заголовка http. Я никогда не слышал об этом дополнительном шаге для передачи данных после.

Я быстро просмотрел соответствующие HTTP RFC и не заметил различий в версии 1.0 или 1.1. Я также использовал wireshark для некоторого анализа и не заметил нескольких передач для почты.

Я что-то упустил или это ошибка в тексте?

Ответы [ 3 ]

1 голос
/ 26 февраля 2010

Простой запрос POST выполняется за один шаг. но когда вы загружаете файл, форма публикуется из нескольких частей. В этом случае тип содержимого application / x-www-form-urlencoded изменяется на multipart / form-data .

0 голосов
/ 24 марта 2014

Заголовок HTTP Expect 100-Continue (см. 8.2.3) и 100 Продолжить ответ позволяет клиенту разделить HTTP POST на 2 передачи (через одно соединение):

Цель статуса 100 (Продолжить) состоит в том, чтобы разрешить клиенту, отправляющему сообщение с телом запроса определить, готов ли сервер-источник принять запрос (на основе заголовков запроса) до того, как клиент отправит запрос тело.

В некоторых случаях это может быть неуместным или очень неэффективно для клиента отправить тело, если сервер отклонит сообщение, не глядя на тело.

Я не думаю, что большинство браузеров используют это, но некоторые библиотеки / ресурсы используют (curl, .Net).

0 голосов
/ 07 мая 2010

Да, между сервером и клиентом существует только одна передача данных.

Контекст отрывка касался связи между веб-сервером и приложением cgi. Связь сервера между веб-сервером и приложением cgi с использованием POST происходит в две отдельные передачи. Запрос на скрипт Python отправляется сервером за одну передачу, а затем данные POST отправляются отдельно через стандартный ввод (две передачи).

Принимая во внимание, что с GET входные данные передаются как env vars или аргументы командной строки за одну передачу

...