Подтвердить что ты не робот

Используют ли методы HTTP POST данные как QueryString?

Я хотел бы узнать, отправляет ли метод POST по HTTP данные в виде QueryString или использует специальную структуру для передачи данных на сервер.

Фактически, когда я анализирую связь с методом POST от клиента к серверу (например, с помощью Fiddler), я не вижу никаких QueryString, но контекст Form Body с парами name/value.

4b9b3361

Ответ 1

Лучший способ визуализировать это - использовать анализатор пакетов, например Wireshark и следует за TCP-потоком. HTTP просто использует TCP для отправки потока данных, начиная с нескольких строк заголовков HTTP. Часто эти данные легко читать, поскольку они состоят из HTML, CSS или XML, но это может быть любой тип данных, который передается через Интернет (исполняемые файлы, изображения, видео и т.д.).

Для запроса GET ваш компьютер запрашивает определенный URL-адрес, и веб-сервер обычно отвечает кодом состояния 200, а содержимое веб-страницы отправляется непосредственно после заголовков ответа HTTP. Этот контент - это тот же контент, который вы увидите, если бы просмотрел источник веб-страницы в своем браузере. Вы упомянутая строка запроса является частью URL-адреса и включается в заголовок запроса HTTP GET, который ваш компьютер отправляет на веб-сервер. Ниже приведен пример запроса HTTP GET для http://accel91.citrix.com:8000/OA_HTML/OALogout.jsp?menu=Y, за которым следует ответ перенаправления 302 от сервера. Некоторые из заголовков HTTP завернуты из-за размера окна просмотра (на самом деле это занимает всего одну строку), а перенаправление 302 включает в себя простую веб-страницу HTML со ссылкой на перенаправленную веб-страницу (большинство браузеров автоматически перенаправляют любой ответ 302 к URL-адресу, указанному в заголовке Location вместо отображения ответа HTML):

HTTP GET with 302 redirect

Для запроса POST у вас может быть строка запроса, но это необычно и не имеет ничего общего с данными, которые вы используете POST. Вместо этого данные включаются непосредственно после заголовков HTTP, которые ваш браузер отправляет на сервер, аналогично ответу 200, который веб-сервер использует для ответа на запрос GET. В случае POSTing простой веб-формы эти данные закодированы с использованием той же кодировки URL, которую использует строка запроса, но если вы используете SOAP веб-службы он также может быть закодирован с использованием многочастного формата MIME и XML-данных.

Например, вот что HTTP POST для веб-службы SOAP на основе XML, расположенной в http://192.168.24.23:8090/msh, выглядит как Wireshark Следуйте за TCP-потоком:

HTTP POST TCP Stream

Ответ 2

Post использует тело сообщения для отправки информации обратно на сервер, в отличие от Get, которая использует строку запроса (все после знака вопроса). Можно отправить как строку запроса Get, так и тело сообщения Post в том же запросе, но это может немного запутать, поэтому лучше избегать.

Как правило, наилучшая практика диктует использование Get, когда вы хотите получить данные, и Post, когда вы хотите его изменить. (Эти правила не заданы в камне, спецификации не запрещают изменять данные с помощью Get, но обычно его избегают на том основании, что вы не хотите, чтобы люди вносили изменения, просто нажав ссылку или набрав URL-адрес)

И наоборот, вы можете использовать Post для извлечения данных без его изменения, но используя Get, вы можете пометить страницу или поделиться URL с другими людьми, что вы не смогли бы сделать, если бы использовали Post.

Ответ 3

Запрос POST может содержать строку запроса, однако обычно это не так - стандартная HTML-форма с действием POST обычно не включает строку запроса, например.

Ответ 4

GET отправит данные как запрос, но POST не будет. Скорее, он отправит его в тело запроса.

Ответ 5

Если ваше сообщение попытается найти следующий URL

mypage.php? ID = 1

у вас будут данные POST, а также данные GET.