Pull to refresh

HTTP — протокол уровня приложений

Reading time4 min
Views93K
Original author: Karl Dubost
Данная статья является переводом первой статьи из цикла статей о протоколе HTTP с сайта opera.com.
Пересоздал её, чтобы тип статьи стал переводом.

Введение


В Бутане, когда люди знакомятся, они обычно приветствуют друг друга словами «Твоё тело чувствует себя хорошо?». В Японии они могут кланяться, в зависимости от обстановки. В Омане мужчины обычно целуют друг друга в нос, после рукопожатия. В Камбодже и Таиланде они обычно соединяют ладони, как при молитве. Это все протоколы общения, простая последовательность кодов, которая имеется значение и готовит обе стороны к обмену информацией.

В Интернете есть очень эффективный протокол прикладного уровня, который готовит компьютеры к обмену информацией: Hypertext Transfer Protocol, или HTTP. HTTP — протокол прикладного уровня поверх коммуникационного протокола TCP/IP. HTTP часто упускается из вида при изучении веб-дизайна и веб-разработки, что является ошибкой: понимание его помогает определить лучший способ взаимодействия с пользователями, достичь лучшей производительности сайта и создает эффективный инструмент для управления информацией в сети Интернет.

Это первая статья из серии статей, целью которой является научить основам HTTP и эффективному его использованию. В этой статье мы увидим на каком этапе HTTP работает в механизме Интернет.

Что такое коммуникационный протокол?


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

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

Онлайновый коммуникационный протокол состоит из тех же элементов. Синтаксисом будет последовательность символов, как ключевые слова, которые мы используем для написания протокола. Семантика — значение, ассоциированное с каждым из этих слов и, в заключении, тайминг — последовательность в которой две или более сущности обмениваются этими словами.

Где 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

Это сообщение означает:
  • 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
<!DOCTYPE html>
<html lang="en">



Тут сервер отвечает: «Я использую HTTP версии 1.1. Ваш запрос выполнен успешно, поэтому я отвечаю кодом 200». Строка Ok необязательна и присутствует для объяснения людям, что этот код означает людям — в данном случае, что всё хорошо и наш запрос был успешно обработан. Далее, серия HTTP заголовков отправляется, чтобы объяснить что это за сообщение и как его следует понимать. В итоге, содержимое страницы, расположенной в корне сайта добавляется к ответу начиная со строки <!DOCTYPE html>. Список ключевых слов HTTP и кодов ответа будут описаны в следующих статьях.
image

Резюме


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

Articles

Change theme settings