Комментарии: (7)

Что важно знать о HTTP

Рубрика : Инструментарий

Продолжение серии статей об Интернет-ботах.

Часть 1, Часть 2, Часть 3

HTTP (Hyper Text Transport Protocol) - это тот самый язык, на котором разговаривают браузеры с веб-серверами.

Самое важное о HTTP:

  • протокол предполагает наличие сервера и клиента (клиент посылает запрос "хочу страницу index.html", сервер отвечает "на тебе эту страницу, вот ее содержимое")
  • это текстовый протокол (запросы и ответы имеют понятный человеку вид, их можно читать в обычном текстовом редакторе)
  • каждое сообщение состоит из стартовой строки, заголовков и тела (об этом подробнее дальше)

svideteli_osvidetelstvovanija

Перечисленные особенности делают HTTP очень простым и расширяемым. Например, когда возникла задача сохранять информацию на машине клиента, протокол переписывать не пришлось. Все что надо было сделать - добавть один новый заголовок запроса (Cookie) и один - ответа (Set-Cookie).

Ниже по тексту я буду предлагать вам делать разные вещи. Например, скачать Яндекс Telnet-клиентом. "Пощупав" HTTP своими руками, проще понять его принцип. Но можно и просто читать, специально для вас у меня припасены скриншоты :)

Минимальный HTTP запрос

Скачаем содержимое сайта www.ya.ru без браузера. Для этого подойдет Telnet-клиент, который наверняка есть в вашей ОС. Чтобы воспользоваться им в Windows, запустите интерпретатор командной строки (cmd.exe). Далее набирайте текст, как на картинке, и нажимайте Enter.

1

Появился пустой черный экран. Вводите:

GET / HTTP/1.1

Нажимайте Enter. Пусть вас не смущает, что ничего не отображается на экране. Продолжайте ввод:

Host: www.ya.ru

Нажимайте Enter дважды.

Это был HTTP-запрос. А вот и ответ:

2

Что же мы сделали:

  1. подключились к серверу ya.ru на 80-ый порт (стандартный для HTTP)
  2. отправили сообщение, состоящее из стартовой строки и одного заголовка
  3. получили ответ, состоящий из стартовой строки, семи заголовков и тела

В стартовой строке запроса необходимо указать 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 трафик. Это необходимо для создания программы, эмулирующей браузер (ведь нам нужен Интернет-бот, помните? :) ).

Комментарии (7)

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:
- в яндексовских сервисах
- торрентс.ру, когда не хочется светить передаваемыми данными

Если мы выясним, что постов не сильно меньше, чем гетов, я исправлю цифру)

Комментировать