Продолжение серии статей об Интернет-ботах.
HTTP (Hyper Text Transport Protocol) - это тот самый язык, на котором разговаривают браузеры с веб-серверами.
Самое важное о HTTP:
- протокол предполагает наличие сервера и клиента (клиент посылает запрос "хочу страницу index.html", сервер отвечает "на тебе эту страницу, вот ее содержимое")
- это текстовый протокол (запросы и ответы имеют понятный человеку вид, их можно читать в обычном текстовом редакторе)
- каждое сообщение состоит из стартовой строки, заголовков и тела (об этом подробнее дальше)

Перечисленные особенности делают HTTP очень простым и расширяемым. Например, когда возникла задача сохранять информацию на машине клиента, протокол переписывать не пришлось. Все что надо было сделать - добавть один новый заголовок запроса (Cookie) и один - ответа (Set-Cookie).
Ниже по тексту я буду предлагать вам делать разные вещи. Например, скачать Яндекс Telnet-клиентом. "Пощупав" HTTP своими руками, проще понять его принцип. Но можно и просто читать, специально для вас у меня припасены скриншоты ![]()
Минимальный HTTP запрос
Скачаем содержимое сайта www.ya.ru без браузера. Для этого подойдет Telnet-клиент, который наверняка есть в вашей ОС. Чтобы воспользоваться им в Windows, запустите интерпретатор командной строки (cmd.exe). Далее набирайте текст, как на картинке, и нажимайте Enter.

Появился пустой черный экран. Вводите:
GET / HTTP/1.1
Нажимайте Enter. Пусть вас не смущает, что ничего не отображается на экране. Продолжайте ввод:
Host: www.ya.ru
Нажимайте Enter дважды.
Это был HTTP-запрос. А вот и ответ:

Что же мы сделали:
- подключились к серверу ya.ru на 80-ый порт (стандартный для HTTP)
- отправили сообщение, состоящее из стартовой строки и одного заголовка
- получили ответ, состоящий из стартовой строки, семи заголовков и тела
В стартовой строке запроса необходимо указать HTTP метод, URI документа и версию HTTP. В заголовке Host - имя хоста. Это был минимальный запрос. Если что-нибудь убрать, сервер скажет "Bad request".
Ответ начинается со стартовой строки "HTTP/1.1 200 OK", что означает, что наш запрос обработан успешно. Нам присылают желанный документ, содержимое которого находится в теле HTTP ответа. Именно его мы увидим, если нажмем в браузере кнопку "Исходный код страницы". Из заголовков хотел бы обратить ваше внимание только на Content-Length - здесь указан размер тела сообщения в байтах.
Пустая строка означает, что заголовки закончились и начинается тело сообщения. Именно поэтому мы нажимали Enter дважды в конце запроса.
Методы HTTP
Стартовая строка запроса начинается с названия метода, то есть имени основной операции, производимой над ресурсом.
Основные методы:
- GET - используется при наборе адреса вручную или переходе по ссылке
- POST - используется при отправке формы
Думаю, что распределение частоты запросов примерно такое:
- 99.9% - GET
- 0.1% - POST (читают Интернет намного чаще, чем пишут)
- 0% - другие методы (имеют скорее историческую ценность)
Примечание: не стоит воспринимать эти цифры буквально.
При обращении к серверному скрипту обычно передаются параметры запроса. Например, URI http://svitter.ru/?p=621 означает, что я хочу прочитать статью #621. Методом GET можно передать парамтеры только через URI. С помощью POST их можно передавать как через URI, так и в теле сообщения.
В следующей статье я напишу, как анализировать HTTP трафик. Это необходимо для создания программы, эмулирующей браузер (ведь нам нужен Интернет-бот, помните?
).
99.9% – GET
0.1% – POST (читают Интернет намного чаще, чем пишут)
0% – другие методы (имеют скорее историческую ценность)
что-то я не совсем согласен =)
Quefueayer, может быть, на каждый пост приходится и более 1000 гетов в интернете, но вряд ли меньше. Я не знаю, где найти подобную достоверную статистику )
Или же ты не согласен про 0% для методов типа DELETE, TRACE, LINK, UNLINK?
А можно просматривать эти «низкоуровневые методы и запросы» в каких-нибудь браузерах?
Ты намекаешь на плагины?) Ну я использую для этого Live HTTP Headers (https://addons.mozilla.org/en-US/firefox/addon/3829) к Firefox. Подробнее об этом в следующей статье напишу.
Дмитрий Ляпин, постов много. Реально. В яндексовских сервисах их много, на том же самом торрентс.ру, когда не хочется светить передаваемыми данными, естественно пользуют пост.
Про 0% согласен =)
+1 к комменту Quefueayer.
GET – это не 99%
Где ссылка на статистику? Или это от балды? %)
см. примечание в статье:
не стоит воспринимать эти цифры буквально.
Пишите примеры POST и почему их много.
От себя:
- отправка форм
- аякс (равновероятно как GET, так и POST)
- веб-службы
Quefueayer:
- в яндексовских сервисах
- торрентс.ру, когда не хочется светить передаваемыми данными
Если мы выясним, что постов не сильно меньше, чем гетов, я исправлю цифру)