Понимание протокола HTTP (часть 2)
HTTP протокол
Ну, мы видели в первой части статьи о HTTP, что есть определенные значения, которые веб-клиент будет отправлять на веб-сервер. Это сделано для того, чтобы убедиться, что и клиент, и сервер будут говорить как бы на одном языке. Эти конкретные значения отправляются, а затем анализируются веб-сервером после получения клиентом.
Сейчас самое время отметить, что почти все в Интернете сегодня общается определенным образом. При этом они соблюдают модель клиент/сервер. В случае HTTP есть Internet Explorer в качестве клиента и IIS в качестве сервера. Другим случаем может быть клиент Mozilla Firefox и веб-сервер Apache. Однако есть несколько заметных исключений из этого правила, можете ли вы придумать одно?
Является ли весь мир моделью клиент/сервер?
К большому огорчению таких организаций, как RIAA и MPAA, протокол p2p не соблюдает модель клиент/сервер. Одноранговая сеть работает так же, как и ее название, то есть: прямое одноранговое соединение. P2P не использует централизованные серверы, а состоит исключительно из клиентских компьютеров. Ближе всего к серверу, который использует P2P, является супернода, которая, как вы уже догадались, является клиентом. Впрочем, о P2P сказано достаточно, а теперь вернемся к обсуждаемой теме! Ой! Не обманывайте себя, думая, что трояны работают как p2p-приложения из-за того, что они часто используют эфемерные порты. Трояны очень часто работают в конфигурации клиент/сервер. Прежде чем я снова отвлекусь, вернемся к HTTP.
Дьявол кроется в деталях
Что ж, приведенное выше объяснение возвращает нас к нашему пакету, показанному ниже. Теперь мы начнем рассматривать различные метрики, как видно из содержимого ASCII, и расширять их значение. Как следует из заголовка над этим абзацем, дьявол кроется в деталях. Обратите внимание, что я буду делать свои комментарии прямо под пакетом.
10:14:50.526262 IP (tos 0x10, ttl 55, id 29186, смещение 0, флаги [нет], proto: TCP (6), длина: 1470) 72.14.207.99.80 > 192.168.1.100.1722:., cksum 0xbe07 (верно), 3866955399:3866956829(1430) акк 3141402927 победа 6432
0x0000: 4510 05be 7202 0000 37 06 32aa 480e cf63 E…r…7.2.H..c
0x0010: c0a8 0164 0050 06ba e67d 0e87 bb3e 012f …dP…}…>./
0x0020: 5 010 1920 be07 0000 4854 5450 2f31 2e31 P……. HTTP/1.1
0x0030: 2032 3030 204f 4b0d 0a43 6163 6865 2d43 .200.OK..Кэш-C
0x0040: 6f6e 7472 6f6c 3a20 7072 6976 6174 650d управление:.частное.
0x0050: 0a43 6f6e 7465 6e74 2d54 7970 653a 2074 .Content-Type:.t
0x0060: 6578 742f 6874 6d6c 0d0a 5365 7276 6572 доб/html..Сервер
0x0070: 3a20 4757 532f 322e 310d 0a54 7261 6e73 :.GWS/2.1..Trans
0x0080: 6665 722d 456e 636f 6469 6e67 3a20 6368 fer-Кодировка:.ch
0x0090: 756e 6b65 640d 0a44 6174 653a 2053 6174 unked..Date:.Sat
0x00a0: 2c20 3330 204a 756c 2032 3030 3520 3134 ,.30.Jul.2005.14
0x00b0: 3a31 343a 3530 2047 4d54 0d0a 0d0a 6132 :14:50.GMT….a2
0x00c0: 630d 0a3c 6874 6d6c 3e3c 6865 6164 3e3c c..<html><head><
0x00d0: 6d65 7461 2068 7474 702d 6571 7569 763d мета.http-equiv=
0x00e0: 2263 6f6e 7465 6e74 2d74 7970 6522 2063 «тип содержимого».c
Ну, для начала мы должны знать, где в пакете фактически начинаются данные HTTP. Если у вас все еще есть листовка TCP/IP и tcpdump, которую я рекомендовал вам загрузить внизу страницы, на которую я только что дал гиперссылку, мы можем легко узнать, где начинаются данные. Мы можем видеть из подчеркнутого 06, что протокол, о котором идет речь, это TCP. Из подчеркнутого значения 5 мы знаем, что в заголовке TCP нет опций. Имея эту информацию, мы знаем, что данные HTTP начинаются с подчеркнутого 4854 и продолжаются до конца самого пакета. Это быстрый и простой способ сориентироваться в содержимом пакета. Теперь, когда мы разобрались с этим, давайте начнем анализировать ответ сервера, как показано в пакете выше.
Пора выплеснуть информацию!
HTTP/1.1 200 ОК
Подчеркнутый выше текст появляется в содержимом пакета ASCII. Это также подчеркнуто в самом пакете выше. Это говорит о том, что веб-сервер использует версию протокола HTTP 1.1. Это также означает, что документ, запрошенный веб-клиентом, найден и включен в ответ. Числовое значение 200, как видно, на самом деле является кодом состояния. Подробнее о кодах состояния позже и их роли.
Кэш-Контроль: частный
Это маленькое загадочное поле означает, что документ, отправляемый веб-клиенту, не должен кэшироваться прокси-сервером и предназначен только для пользователя, запрашивающего документ. Кэширование и то, как оно работает, — это гораздо больше. Интересное чтение, если кто-то так склонен.
Тип контента: текст/html
Выше показано, что сервер сообщает клиенту, т. е. что отправляемый включенный документ имеет формат text/html. Таким образом, веб-клиент будет знать, как отображать информацию.
Сервер: GWS/2.1
Здесь указан тип сервера или серверного программного обеспечения, которое, как вы уже догадались, используется веб-сервером. В данном случае тип сервера, используемый Google.
Передача-кодирование: по частям
В HTTP 1.1 поддерживается кодирование передачи по частям. Что он делает, хотя вы спросите? Проще говоря, кодирование передачи по частям изменит тело сообщения, чтобы его можно было передать в виде серии частей. Каждый чанк имеет свой индикатор размера. Напротив, обычная передача файла HTTP будет содержать поле Content-Length, указывающее объем передаваемых данных.
Дата: 30 июля 2005 г., 14:14:50 по Гринвичу.
Из этой строки мы можем сделать вывод, что это будут дата и время по Гринвичу, как они видны на сервере. Об этом было довольно просто угадать и быть правильным. Если бы все они были так просты!
<html><head><meta.http-equiv="тип контента"
Для тех из вас, кто может быть незнаком с кодом HTML и тем, как он выглядит, имейте в виду, что подчеркнутая часть выше действительно является кодом HTML. Неплохим подарком, который вы видите в HTML, является использование <> перед каждым кодом. Именно с помощью этого HTML-кода ваш веб-браузер, то есть Internet Explorer, знает, как правильно отобразить страницу для вас. Через весь этот HTML передается цвет страницы и то, как форматируется вся информация, будь то в форме абзаца, маркера или таблицы.
Если вы хотите просмотреть весь HTML-код, содержащийся на веб-странице, которую вы сейчас читаете (этот документ!), нажмите «Просмотр» в веб-браузере, а затем нажмите «Источник». При этом веб-страница будет отображаться в формате исходного кода. Довольно аккуратно, а! Если вы хотите повеселиться, просто вставьте исходный код веб-страницы, скажем, в блокнот и внесите некоторые изменения, а затем перезагрузите эту страницу. Вы увидите, что изменили содержимое этой страницы. И снова это вызвало бы у меня «довольно аккуратный» комментарий.
Что ж, на этой ноте мы прервем эту статью. В последней части серии статей о HTTP я расскажу больше о тонкостях HTTP и способах воспроизведения или изменения HTTP-запросов. А пока внимательно следите за своими пакетами!
Понимание протокола HTTP (часть 1)»