Отображение HTTP-запросов на HTTP-ответы - PullRequest
7 голосов
/ 29 января 2010

Если я делаю несколько запросов HTTP Get на один и тот же сервер и получаю HTTP 200 OK ответов на каждый из них, как мне узнать, какой запрос сопоставляется с каким ответом с помощью Wireshark?

В настоящее время похоже, что сделан запрос http, и следующий ответ HTTP 200 OK быстро получен, поэтому все находится в правильной последовательности. Однако я видел все наоборот. Например, используя Google Maps API v2, я сделал несколько запросов на информацию о местоположении, а затем информация получена в произвольном порядке (очень похожем на порядок, в котором я ее запрашивал, но не обязательно идеально).

Таким образом, моя интуиция заключается в том, что я не могу предположить, что мои ответы будут получены в определенном порядке, даже если они могут быть в порядке в большинстве случаев. Поэтому мне интересно, как я могу определить этот порядок из ответа.

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

Обновление: это не имеет ничего общего с wireshark. Я считаю, что это сбивает с толку людей, поэтому я убрал его из названия. Это связано с протоколом HTTP поверх протокола TCP / IP и тем, как мы отображаем ответы на запросы.

Спасибо.

Ответы [ 4 ]

13 голосов
/ 29 января 2010

После того, как вы прекратили захват пакетов, выполните следующие действия:

  1. установить курсор на запрос GET

  2. Открыть меню анализа

  3. нажмите «Follow TCP Stream»

Появится новое окно с последовательными запросами и ответами.

5 голосов
/ 19 января 2014

Пока я гуглял по совершенно другому вопросу, я видел этот и думаю, что могу дать более полный ответ:

HTTP требует, чтобы ответы приходили в том порядке, в котором они были запрошены. Поэтому, если вы смотрите на одно TCP-соединение в определенный момент времени, вы должны увидеть:

Запрос; Отклик ; Запрос ; Ответ ...

Также в HTTP / 1.1 есть поддержка «Конвейера», где клиенту не нужно ждать получения ответов, чтобы выполнить следующий запрос. Что можно наблюдать в таких случаях:

Запрос; Отклик ; Запрос ; Запрос ; Отклик ; Отклик ; Запрос ; Ответ

В самом ответе HTTP нет ссылки на конкретный запрос, который его вызвал.

Предложение Filipo является классическим при отладке / наблюдении за одним TCP-соединением, но при просмотре нескольких TCP-соединений вы не можете щелкнуть по следующему потоку TCP, поскольку вам придется делать это для каждого соединения.

Если у вас много TCP-соединений и много запросов / ответов, вам придется посмотреть на порт источника TCP в пакете запроса и порт TCP dest в пакете ответа, чтобы узнать, какой ответ связан с каждым tcp-соединением, и затем примените правила запроса / ответа HTTP.

Кроме того, Wireshark МОЖЕТ распаковать тело ответа, и оно сделает это автоматически, если все тело ответа получено, но это НЕ будет выполнено в Следующем потоке TCP.

Я всегда использую Wireshark для отладки HTTP.

3 голосов
/ 29 января 2010

Похоже, что эта возможность не предоставляется протоколом HTTP на прикладном уровне, поэтому я должен перейти на транспортный уровень, чтобы определить это. В моем случае уровень TCP / IP использует порядковые номера.

HTTP предполагает только надежное
транспорт; любой протокол, который обеспечивает такие гарантии могут быть использованы; отображение запроса HTTP / 1.1 и структуры ответа на
транспортные единицы данных протокола вопрос выходит за рамки эта спецификация.

Подробнее: http://www.faqs.org/rfcs/rfc2616.html#ixzz0e20kxKcz

2 голосов
/ 29 января 2010

Не используйте Wireshark для отладки HTTP, используйте отладчик HTTP, такой как Fiddler2

...