"Да кто это такой, ХТТП ваш?"

«HTTP-протокол и как он устроен»

"Да кто это такой, ХТТП ваш?"

Привет, листая вакансии на junior-позиции, будь то QA, Python-developer, Automation QA и другие, я часто натыкался на строгое требование: «И штоб ХТТП знал, а то знаете ли(Желательно навык работы в Почтальоне(Postman). И я, может быть не с большим опытом, но понятным, немного "зумерским", по большей части "бумерским» методом, постараюсь объяснить, что это такое и с чем его едят.

HTTP — широко распространённый протокол передачи данных, изначально предназначенный для передачи гипертекстовых документов (то есть документов, которые могут содержать ссылки, позволяющие организовать переход к другим документам) .

Звучит несколько громоздко и это скорее ответ на 22 билет на первом курсе. И правда, но если пытаться как-то визуализировать ответ, то можно подать это так: "Вы пришли в ресторан. Между вашим пустым желудком и этой скромной забегаловкой возник взаимовыгодный обмен: ваши деньги -- наши блюда. Так вот, сидя за столиком и нервно потирая меню, вы уже готовы сделать заказ. Вы клиент, и клиент ресторана, но еще и сам клиент клиент-серверной архитектуры(уж простите меня за тавтологию). Официант принимает ваш заказ, он что-то между клиентом и сервером(кухней). Одним словом - прокси-сервер. Ваш заказ и есть HTTP-протокол. Способ взаимодействия клиента с сервером, некий унифицированный язык, которым общается гость с кухней, мы не будем вдаваться в подробности моделей OSI, где ноги официанта будут служить протоколом TCP, а столик будет иметь свой собственный MAC-адрес, мы говорим с вами не об этом(под абзацем оставлю полезный линк:

А как же выглядит HTTP? Ну вообще, стоит учесть, что он бывает двух видов: HTTP-запрос и HTTP-ответ, но по своей структуре он выглядит так:

картинка взята из публичного доступа
картинка взята из публичного доступа

Здесь, как мы можем догадаться, изображен HTTP-запрос. В стартовой строке прячется метод(в данном случае POST). Он отвечает за то, что запросить у сервера, будь то данные(метод GET), или же загрузить заполненную форму регистрации на сервер(все тот же POST). Вариантов не сказать чтобы много, но поверьте, специалисту, отвечающему за взаимодействие клиента и сервера бывает есть над чем поломать голову.

Путь до ресурса. Думаю здесь все понятно. Но я все же объясню. Это адрес, по которому клиент отправляет свой запрос на сервер, в данном случае, где хранится тот или иной документ.

Версия протокола. Ну так надо, больше мне нечего добавить.(Сейчас используется версия HTTP 1.1

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

Ну а тело сообщения -- как раз таки данные, что поступают с клиента на сервер. Обычно, они в JSON-формате, но есть еще XML... Ох уж этот XSD. Кто знает, тот меня поймет.

Ну а что же с HTTP-ответами? Ситуация очень схожа, но все же есть некие различия.

картинка взята из публичного доступа
картинка взята из публичного доступа

В строке состояния уже знакомая нам версия протокола, но есть еще и код состояния и даже его текст. Что это?

Код состояния - информация клиента о результатах выполнения запроса.

Наверное все знакомы с ошибкой 404? Так это как раз и есть, ответ сервера на запрос клиента. Приведу пример все ту же забегаловку, когда, уже уставший официант, несет вам извещение: "Прости, друх, орешки закончились". Вот еще несколько примеров:

  • 1хх - информационный
  • 2хх -успешный
  • 3хх --редирект(перенаправление на другую страницу)
  • 4хх - ошибка клиента
  • 5хх - ошибка сервера

Мы с Вами чуть поболтали о HTTP-протоколе, уставшем официанте и неудавшемся перекусе, но надеюсь, хоть что-то Вам показалось смешным, а может даже и информативным. Мы не обсудили еще сертификаты, защищенность, передачу данных, и где искать наш протокол. Но поверьте: всему свое время.

Внизу оставлю линк на более подробное описание всего процесса.

2.4K2.4K показов
126126 открытий
1 комментарий

Ну в этой схеме официант скорее и есть транспортный протокол

Ответить