Веб-стандарты / [Из песочницы] HTTP — протокол уровня приложений

в 11:58, , рубрики: http, OSI, tcp, учебные материалы, метки: , , ,

Веб-стандарты / [Из песочницы] HTTP — протокол уровня приложений
Данная статья является переводом первой статьи из цикла статей о протоколе HTTP с сайта opera.com.
Жалко не мог отписать в этот вопрос о том, что этот перевод я уже сделал. Upd: сейчас отписался.
Введение

В Бутане, когда люди знакомятся, они обычно приветствуют друг друга словами «Твоё тело чувствует себя хорошо?». В Японии они могут кланяться, в зависимости от обстановки. В Омане мужчины обычно целуют друг друга в нос, после рукопожатия. В Камбодже и Таиланде они обычно соединяют ладони, как при молитве. Это все протоколы общения, простая последовательность кодов, которая имеется значение и готовит обе стороны к обмену информацией.
В Интернете есть очень эффективный протокол прикладного уровня, который готовит компьютеры к обмену информацией: Hypertext Transfer Protocol, или HTTP. HTTP — протокол прикладного уровня поверх коммуникационного протокола TCP/IP. HTTP часто пропускается при изучении веб-дизайна и веб-разработки, что является ошибкой: понимание его помогает определить лучшее взаимодействие с пользователями, достичь лучшей производительности сайта и создает эффективный инструмент для управления информацией в сети Интернет.
Это первая статья из серии статей, целью которой является научить основам HTTP и как его использовать эффективно. В этой статье мы увидим где HTTP вклинивается в механизм Интернет.
Что такое коммуникационный протокол

До того, как углубляться в специфику, давайте рассмотрим базовый коммуникационный сценарий. Чтобы обмениваться информацией обеим сторонам (могут быть программным обеспечением, устройством, людьми, и т.д.) необходимо:синтакс (формат данных и программного кода)

семантика (управление информацией и обработка ошибок)

тайминг (согласование по времени и последовательности)

Когда два человека встречаются, они вовлекаются в коммуникационный протокол: например, в Японии человек сделает специфическое действие с телом. Одно из таких действий — поклон, который является синтаксисом, используемым для взаимодействия. В японской традиции жест «поклон» (и многие другие) ассоциируется с семантикой приветствия кого-либо. В итоге, когда один человек кланяется другому, устанавливается цепочка событий между этими двумя людьми в определенном тайминге.
Онлайновый коммуникационный протокол состоит из тех же элементов. Синтаксисом будет последовательность символов, как ключевые слова, которые мы используем для написания протокола. Семантика — значение, ассоциированное с каждым из этих слов и в заключение тайминг — последовательность в которой две или более сущности обмениваются этими словами.
Где HTTP вклинивается в механизм?

Сам HTTP работает поверх остальных протоколов. Во время соединения к веб-сайту, например к www.example.org, пользовательский агент использует семейство протоколов TCP/IP. Модель TCP/IP была спроектирована в 1970 с 4 уровнями:Канальный уровень, описывающее доступ к физическому устройству (т.е. использующее сетевую карту)

Сетевой уровень, описывающее обёртывание и роутинг данных — как они пакуются (IP)

Транспортный уровень, описывающий путь, которым доставляются данные из исходной точки с финальному получателю (TCP, UDP)

Приколадной уровень, описывающий значение или формат передаваемых сообщений (HTTP)

HTTP — протокол прикладного уровня, который находится над коммуникационным протоколом. Это важно иметь ввиду. Разделение модели на независимые уровни помогает развивать части платформы, без необходимости переписывать всё. Например, TCP, транспортный протокол, можно развивать, без необходимости модифицировать HTTP, протокол прикладного уровня. В первых статьях про HTTP мы уделим внимание разделению уровней, как это сделано в TCP/IP модели. HTTP предназначен для обмена информацией двумя частями программного обеспечения посредством HTTP сообщений. Вид и дизайн этих сообщений имеет последовательности на клиенте (браузер, например), сервере (веб-сайт) и на промежуточных точках (прокси-сервер).
Давайте доберемся до сервера

Порт 80 — порт по умолчания для соединения к веб-серверам. Мы можем сами попробовать сделать это используя командную строку. Откройте ваш терминал/командную строку и попробуйте открыть соединение к www.opera.com на порт 80 используя следующую команду:telnet www.opera.com 80
Вы должны получить вывод наподобие:Trying 195.189.143.147...
Connected to front.opera.com.
Escape character is '^]'.
Connection closed by foreign host.
Мы видим, что терминал пытается установить соединение с сервером, расположенным по адресу 195.189.143.147. Если мы больше ничего не будем делать, сервер сам закроет соединение. Вполне можно использовать другой порт и другой коммуникационный протокол, но эти — самые общепринятые.
Давайте поговорим немного об HTTP

Давай опять попробуем соединиться с сервером. Введите следующее сообщение в вашем терминале/командной строке:telnet www.opera.com 80
Как только соединение установится, введите следующее HTTP сообщение быстро (до того, как соединение автоматически закроется), потом нажмите Enter дважды:GET / HTTP/1.1
Host: www.opera.com
This message specifies:
Это сообщение устанавливает:GET: Что мы хотим получить информацию.

/: Что информация, которую мы хотим получить находится в корне сайта.

HTTP/1.1: Что мы используем HTTP версии 1.1.

Host: Мы пытаемся обратиться к определенному сайту.

www.opera.com: имя сайта — www.opera.com.

Теперь настает очередь сервера отвечать. Вы должны увидеть в окне терминала содержимое сайта, начиная с этих строк:HTTP/1.1 200 OK
Date: Wed, 23 Nov 2011 19:41:37 GMT
Server: Apache
Content-Type: text/html; charset=utf-8
Set-Cookie: language=none; path=/; domain=www.opera.com; expires=Thu, 25-Aug-2011 19:41:38 GMT
Set-Cookie: language=en; path=/; domain=.opera.com; expires=Sat, 20-Nov-2021 19:41:38 GMT
Vary: Accept-Encoding
Transfer-Encoding: chunked


Тут сервер отвечает: "Я использую HTTP версии 1.1. Ваш запрос выполнен успешно, поэтому я отвечаю кодом 200". Строка Ok необязательна и присутствует для объяснения что этот код означает людям - в данном случае, что всё хорошо и наш запрос был успешно обработан. Серия HTTP заголовков отправляется, чтобы объяснить что это за сообщение и как его следует понимать. В итоге, содержимое страницы, расположенной в корне сайта добавляется к ответу начиная со строки . Список ключевых слов HTTP и кодов ответа будут описаны в следующих статьях.

Резюме

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


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js