2010-01-29 2 views
6

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

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

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

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

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

Спасибо.

ответ

3

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

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

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

12

После того, как вы перестали захватывая пакеты следовать этим шагам:

  1. позицию курсора на запрос GET

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

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

Вы получаете новое окно с запросами и ответами в последовательности.

+0

Это очень хорошая информация для эффективного использования Wireshark, но я ищу что-то другое в качестве ответа. –

+4

Собственно, это должен быть ответ. В представлении tcp stream вы можете увидеть точную последовательность запроса/ответа. –

2

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

+2

Нет ничего плохого в использовании Wireshark вместо Fiddler2, особенно если у вас больше опыта с ним. –

+0

Wireshark не распаковывает gzip/delfate для вас. И он также не удаляет протокол кодирования передачи пакетов из тела. – Zombies

+0

Кроме того, Fiddler доступен только для Windows. – kramer65

5

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

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

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

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

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

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

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

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

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

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

+0

это не относится к многопоточной среде. –

Смежные вопросы