Http как работает

13

Протокол HTTP

В середине 90-х годов очень популярной стала WWW (World Wide Web) — «Всемирная паутина». Это набор протоколов и программ для Интернета, представляющих информацию в гипертекстовом формате. Знаменитый браузер Mosaic, созданный в Национальном центре по применению супер-ЭВМ (National Center for Supercomputer Applications, NCSA), был первым графическим Web-браузером и способствовал популяризации WWW. Web разработана в 1989 году в Европейской лаборатории физики частиц (European Laboratory for Particle Physics, CERN) Тимоти Бернерсом-Ли (Timothy Berners-Lee). В настоящее время всеми стандартами, имеющими отношение к Web, ведает Консорциум World Wide Web (W3C).

Гипертекст применяется для создания документов, взаимосвязанных ссылками, — с ними легко управляться даже новичкам. В протоколах для Web в одних из первых в Интернете стали использовать гипертекст. Для упрощения и повышения эффективности работы с большими объемами непоследовательной информации. Теперь пользователю не обязательно заучивать команды базового протокола FTP, а для получения информации из Интернета не надо быть асом-программистом — достаточно просто щелкнуть ссылку на странице.

Для упаковки и передачи данных в Web применяются протоколы MIME (Multipurpose Internet Mail Extensions) и TCP/IP (Transmission Control Protocol/Internet Protocol), а также и другие, например FTP и Telnet. Специально для Web разработаны указатели URL (Uniform Resource Locator), протокол HTTP (Hypertext transfer Protocol), язык HTML (Hyper-text Markup Language) и интерфейс CGI (Common Gateway Interface).

Унифицированные указатели ресурсов (URL)

Указатель URL (Uniform Resource Locator) — это адрес сетевого ресурса. Он похож на имя файла, но дополнительно содержит имя сервера и информацию о сетевом протоколе, используемом данным ресурсом. В некоторых случаях URL включает сведения об имени пользователя, а также специальные аргументы и параметры протокола.

На Web-страницах URL используются для ссылок на другие страницы. В виде URL можно описать многие распространенные сетевые команды, указатели на файлы (доступные через FTP) и на сообщения из групп новостей Usenet (всемирной сети UNIX-систем, функционирующей как электронная доска объявлений для групп пользователей) и т.д.

Все это было доступно и раньше, но появление URL значительно упростило программы, представляющие ценную информацию в гипертекстовой среде. Действительно до эры URL процесс передачи всей информации о сервере, файле, протоколе, пользователе и аргументах был достаточно неудобен, особенно для новичков. С появлением URL значительно упростился весь механизм.

Указатель URL состоит из следующих частей:

<схема>:<специальное_имя>

где <схема> — это название схемы (используемый протокол, например http, ftp и т. д.), а <специальное_имя> — имя в формате, зависящем от используемой схемы.

Многие URL имеют следующий формат:

<протокол>://<пользователь>:<пароль>@<хост>:<порт>/<путь>

где

  • <пользователь> — это имя пользователя, если оно необходимо (например, для FTP с не анонимной регистрацией);

  • <пароль> — пароль этого имени пользователя;

  • <хост> — доменное имя хоста, например “fictionalcorp.com, или его IP-адрес в числовом формате вида х.х.х.х:

  • <nopm> — номер IP-порта для соединения (если он не указан, используется стандартное значение для данного протокола);

  • <путь> — связанные с URL данные, часто это указание подкаталога и имени файла.

Для Web-страницы URL выглядит, например, так:

http: //www.fictionalcorp.com/corpinfo/sales.html

  • Фрагмент http указывает, что URL использует протокол HTTP;

  • www.fictionalcorp.com — имя сервера, к которому желает подключиться пользователь;

  • /corpinfo/sales.html — подкаталог и имя HTML-файла, хранящего Web-страницу.

Ниже перечислены некоторые популярные схемы:

  • http Протокол HTTP

  • https Протокол HTTP, зашифрованный с помощью SSL (Secure Socket Layer)

  • mailto Адрес электронной почты

  • ftp Протокол FTP

  • news Новости Usenet

  • file Имена файлов определенного хоста

  • telnet Интерактивный сеанс Telnet

Более короткий URL — http://www.fictionalcorp.com указывает на «основную страницу» этого сервера. Если явно не задано имя файла, то HTTP-серверы используют значение по умолчанию (часто это default.html или index.html). Приведенный URL можно преобразовать к более явному виду: http://www.fictiorialcorp.com/default.html.

Для протокола FTP применяется сходный синтаксис. Обращение к файлу bar.txt подкаталога /foo FТР-сервера ftp.fictionalcorp.com на языке URL выглядит следующим образом:

ftp://ftp.fictionalcorp.com/foo/bar.txt

Из-за огромной популярности World Wide Web в Интернете многие браузеры предполагают наличие префикса «http://» в URL, не содержащем явного указания протокола. Обычно имена доменов в явном виде содержат информацию о протоколе. Например, FТР-сервер компании называется ftp.fictionalcorp.com, а ее HTTP-сервер— www.fictionalcorp.com. Однако с появлением URL компания вправе использовать одно и то же имя fictionalcorp.com для обоих серверов. Тогда при использовании их ресурсов необходимо явно задавать соответствующий протокол, например ftp://fictionalcorp.com/public/foo.txt или http://fictionalcorp.com/

Частичный или относительный URL — тот, в котором не указан протокол, хост, порт или путь, а лишь относительное имя ресурса. Например, если Web-страница http://www.fictionalcorp.com/piiblic/foo/bar.html ссылается на bletch.html, это не что иное, как относительная форма от http://www.fictionalcorp. com/public/foo/bletch.html.

Как уже говорилось ранее, синтаксис URL меняется в зависимости от URL-схемы. Например, в протоколе HTTP символ «#» после имени HTML-файла обозначает точку привязки (закладку). Так, http://www.fic-tionafcorp.com/foo.html#disclaimer указывает на фрагмент disclaimer документа foo.html.

Вместо подкаталога и имени файла URL может содержать другую информацию о ресурсе. Так выгладит URL для протокола NNTP:

nntp://<хост>:<порт>/<группа_новостей>/<статья>

где <группа_новостей> — имя группы новостей, а <статья> — номер статьи.

Вообще говоря, в URL следует использовать только алфавитно-цифровые символы, так как большинство специальных символов зарезервированы или их прямое использование небезопасно. К первым относятся: «;», «/», «?», «:», «@», «=», «&». Ненадежные символы — «<», «>», «»»,«#», «%», «{», «}», «|», «», « », «-», «[», «]», «’».

Если имя ресурса содержит зарезервированный символ или символ, не принадлежащий US-ASCII, то перед использованием в URL имя надо закодировать. При кодировании символ заменяется тремя новыми — знаком процента (%) и двумя шестнадцатеричными цифрами, представляющими код заменяемого символа.

Предпосылки

Протокол HTTP — основной и достаточно простой способ передачи данных между Web-сервером и клиентом. До появления Web и HTTP для передачи файлов в Интернете в качестве протокола ввода/вывода чаще всего применяли FTP.

HTTP — это компактный, быстрый протокол ввода/вывода, работающий с URL и предназначенный для сред гипертекст/гипермедиа. В отличие от FTP, это протокол без состояний и имеет лишь несколько команд (методов). Благодаря использованию MIME, HTTP приспосабливается ко многим форматам данных и различным задачам ввода/вывода.

HTTP — клиент-серверный протокол, реализующий модель запрос/ответ. HTTP-клиент, или пользовательский агент (обычно это Web-браузер), подключается к HTTP-серверу с помощью URL и запрашивает ресурс, например HTML-документ.

Для инкапсуляции данных в этой модели применяются расширения MIME. Структура данных, пересылаемых между клиентом и сервером, напоминает электронную почту. Она состоит из тела сообщения и метаданных (заголовков сообщений). Протокол HTTP передает информацию в формате MIME. Метаданные содержат информацию, необходимую для передачи данных между HTTP-сервером и клиентом. Однако HTTP допускает двоичный формат, чего обычный MIME (из-за 7-битных ограничений почтовых шлюзов) не позволяет.

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

Традиционно HTTP-клиенты и серверы общаются через 80-й порт TCP/IP, по умолчанию зарезервированный для HTTP. Однако могут использоваться и другие порты, явно указанные в URL. В дополнение замечу, что HTTP не предполагает применение именно TCP/IP и отлично функционирует с другими протоколами гарантированной доставки.

Web-браузер часто обрабатывает Web-страницы, состоящие из многих объектов, например, самого HTML-документа и нескольких изображений (GIF, JPEG, PNG и др.). Большинство HTTP-клиентов для чтения начального HTML-документа создают только один поток (с одним подключением к серверу), а затем еще несколько потоков (каждый с отдельным подключением к серверу) для получения остальных необходимых файлов. Соединение устанавливается по запросу клиента и разрывается после ответа сервера.

Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и ответ сервера состоит из трех частей: строки запроса (ответа), раздела заголовка и тела. Клиент инициирует транзакцию следующим образом:

1. Клиент устанавливает связь с сервером по назначенному номеру порта (по умолчанию — 80). Затем клиент посылает запрос документа, указав HTTP-команду, называемую методом, адрес документа и номер версии HTTP. Например, в запросе

GET /index.html HTTP/1.0

используется метод GET, которым с помощью версии 1.0 HTTP запрашивается документ index.html. Методы HTTP более подробно рассматриваются ниже.

2. Клиент посылает информацию заголовка (необязательную), чтобы сообщить серверу информацию о своей конфигурации и данные о форматах документов, которые он может принимать. Вся информация заголовка указывается построчно, при этом в каждой строке приводится имя и значение. Например, приведенный ниже заголовок, посланный клиентом, содержит его имя и номер версии, а также информацию о некоторых предпочтительных для клиента типах документов:

User-Agent: Mozilla/4.05 (WinNT; 1)

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*

Завершается заголовок пустой строкой.

3. Послав запрос и заголовки, клиент может отправить и дополнительные данные. Эти данные используются главным образом теми CGI-программами, которые применяют метод POST. Клиенты (например, Netscape Navigator-Gold), также могут использовать их для помещения отредактированной страницы обратно на Web-сервер.

Сервер отвечает на запрос клиента следующим образом:

1. Первая часть ответа сервера — строка состояния, содержащая три поля: версию HTTP, код состояния и его описание. Поле версии содержит номер версии HTTP, которой данный сервер пользуется для передачи ответа.

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

НТТР/1.0 200 OK

говорит о том, что сервер для ответа использует версию HTTP 1.0. Код состояния 200 означает, что запрос клиента был успешным, и затребованные данные будут переданы после заголовков.

2. После строки состояния сервер передает клиенту информацию заголовка, содержащую данные о самом сервере и затребованном документе. Ниже приведен пример заголовка:

Date: Fri, 10 Jan 1998 08:17:58 GMT

Server: Apache/1.2.6

Last-modified: Mon, 12 Jun 1997 21:53:08 GMT

Content-type: text/html

Content-length: 2482

Завершает заголовок пустая строка.

3. Если запрос клиента успешен, то посылаются затребованные данные. Это может быть копия файла или результат выполнения CGI-программы. Если запрос клиента удовлетворить нельзя, передаются дополнительные данные в виде понятного для пользователя разъяснения причин, по которым сервер не смог выполнить данный запрос.

В HTTP 1.0 за передачей сервером затребованных данных следует разъединение с клиентом, и транзакция считается завершенной, если не передан заголовок Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию не разрывает соединение, и клиент может посылать другие запросы. Поскольку во многие документы встроены другие документы — изображения, кадры, апплеты и т.д., это позволяет сэкономить время и затраты клиента, которому в противном случае пришлось бы для получения всего одной страницы многократно соединяться с одним и тем же сервером. Таким образом, в HTTP 1.1 транзакция может циклически повторяться, пока клиент или сервер не закроет соединение явно.

HTTP не сохраняет информацию по транзакциям, поэтому в следующей транзакции приходится начинать все заново. Преимущество такого правила организации взаимодействия состоит в том, что HTTP сервер может обслужить в заданный промежуток времени гораздо больше клиентов, ибо устраняются дополнительные расходы на отслеживание сеансов от одного соединения к другому. Есть и недостаток: для сохранения информации по транзакциям более сложные CGI-программы должны пользоваться скрытыми полями ввода или внешними средствами, например «ключиками» (cookies) Netscape.

studfiles.net

Зачем создали протокол HTTP

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

Принимает веб-страницы клиент (браузер), а отдаёт страницы сервер. Эта технология так и называется — клиент-серверная технология.

Благодаря HTTP стало возможно передавать веб-страницы в интернете. А что же содержится в самих страницах, которые пересылает нам сервер? Обыкновенный HTML-код, который поступает в браузер, которому остается только верно интерпретировать полученную информацию и показать вам готовый сайт.

Еще в 2006 году практически половина HTTP-трафика Северной Америки складывалась из потокового звука и видео.

Как работает HTTP

  1. Браузер отправляет запрос, запрашивая нужную страницу сервера.
  2. Сервер получает запрос и начинает искать страницу. 
  3. Браузер  получает ответ от сервера с результатами запроса:
    • Код запрашиваемой страницы и служебная информация — если страница найдена.
    • Код ошибки и служебная информация в случае сбоя.

Когда браузер дает запрос на файл, запрос содержит специальную команду HTTP. Если запрашиваемый файл и правда есть на сервере, файл отправляется. А вот принимающей странице уже стоит решить, показать файл на экране, сохранить на диск или сделать с результатом что-то еще.

Чтобы идентифицировать ресурсы в сети, протокол HTTP пользуется глобальными URI. Отличие HTTP от других протоколов — он не сохраняет свое состояние. То есть не сохраняется состояние между парой «запрос-ответ».

HTTP — это не единственный протокол, который используют в Интернете. Также используются:

  • FTP (File Transfer Protocol) — протокол передачи файлов.
  • POP (Post Office Protocol) и SMTP (Simple Mail Transport Protocol) — для обмена сообщениями электронной почты.
  • SHTTP (Secure Hypertext Transfer Protocol) — шифрованная разновидность HTTP. Информация, которая передается по этому протоколу, кодируется. Обычно безопасность важна в случае обмена конфиденциальными данными.

И другие протоколы, у которых есть одно хорошее свойство — все они работают незаметно для нас с вами.

Март 1991 года — Тим Бернерс-Ли предложил использовать HTTP.

Именно Бернерс-Ли разработал все первое, что связано с Интернетом: браузер, сервер, гиперссылки, первый сайт (info.cern.ch) Как выглядел первый сайт, можно увидеть по ссылке. 

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

В 2015 году появился HTTP/2, который стал бинарным, изменились способы, которыми информацию разбивали на фрагменты.

Безопасность протокола HTTP

Сам HTTP не подразумевает шифрование информации. Но есть расширение для протокола, которое умеет упаковывать данные в протокол SSL или TLS.

HTTPS (S — Secure) — популярное решение, которое не позволяет перехватывать передаваемую информацию и защитить информацию от MITM- атак «man-in-the-middle» или атака посредника.

MITM по сути испорченный телефон, в котором информация подменяется намеренно. О подмене не знает ни клиент ни сервер.

Из чего состоит HTTP

Мы много упоминали, что сервер и клиент отправляют и получают запросы. Так что же содержится в этих запросах? Каждое сообщение HTTP состоит из трех частей:

  1. Стартовая строка, которая определяет тип сообщения.
  2. Заголовки, с помощью которых характеризуют тело сообщения. 
  3. Тело сообщения, где содержатся уже нужные данные.

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

vadimstroganov.com

Hypertext Transfer Protocol (или HTTP) является основой передачи данных для World Wide Web. Такие протоколы представляют собой структурированный текст, который использует логические связи (гиперссылки) между узлами, содержащими определенные данные. Таким образом, это способ обмена или передачи гипертекста.

http протокол

HTTP-протокол работает как функция запрос-ответ в клиентско-серверной модели вычислений. Так, веб-браузер выступает в роли клиента, а хостинг сайта является сервером. Клиент отправляет сообщение запроса HTTP на сервер, предоставляющий определенные ресурсы (например, HTML-файлы и другие материалы), а затем возвращает ответное сообщение. Ответ содержит информацию о запросе, и также может содержать запрошенное содержимое в теле сообщения.

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

HTTP-протокол предназначен для обеспечения промежуточных элементов сети для повышения или обеспечения связи между клиентами и серверами. Сайты с большим трафиком часто извлекают для себя выгоду из кэша веб-серверов, которые отображают контент от имени вышестоящих ресурсов, уменьшая время загрузки. Кэш веб-браузеров при этом позволяет пользователю уменьшить сетевой трафик. Прокси-сервера, которые использует HTTP-протокол в локальной сети, могут обеспечить связь для клиентов, не допускающих глобальную маршрутизацию адреса, путем ретрансляции сообщений с внешних серверов.протокол передачи гипертекста http

Сессия HTTP представляет собой последовательный процесс из запросов и ответов. Клиент инициирует запрос путем создания TCP-подключения к определенному порту на сервере, а последний прослушивает этот порт и ждет сообщение с запросом. При его получении сервер посылает в строке состояния ответное сообщение. Тело этого сообщения, как правило, представляет собой запрошенный ресурс, хотя может быть отображено и сообщение об ошибке или другая информация.

Если рассматривать назначение протокола HTTP, следует отметить, что он определяет методы с целью указать нужное действие, выполняемое по выявленным ресурсам. При этом вид отображаемой информации (ранее существовавшие данные или генерируемые динамически) зависит от реализации сервера. Часто такой ресурс соответствует файлу или сценарию, расположенному на хостинге.

Некоторые методы, которые использует протокол передачи гипертекста HTTP, предназначены только для поиска информации и при этом не должны изменять состояние сервера. Другими словами, они не оказывают серьезного воздействия, за исключением относительно безвредных эффектов – кэширования или увеличения статистики посещений.назначение протокола http

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

fb.ru

Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике Cерверы и протоколы и ее разделе HTTP протокол.  Данная запись является завершающей в цикле заметок по протоколу HTTP, после нее я подготовлю навигацию и, возможно, будут некоторые записи, связанные с протоколом HTTP, но не имеющие непосредственного к нему отношения. В принципе, эта запись поможет тебе понять, как работает HTTP протокол, а если нужны будут подробности — переходи по ссылкам, которые я для тебя расставил по всей статье.

Что такое HTTP протокол?

Давайте дадим определение тому, что такое HTTP протокол, но, прежде чем дать определение термину HTTP протокол, давайте разберемся со словом протокол. Слово протокол переводится с греческого дословно, как первый и клей. В древности это был листок, который клеился к свитку и на нем автор писал свое имя, дату написания и прочую никому ненужную информацию, вернее, служебную. Почему я говорю ненужную? Да потому, что рядовому обывателю интереснее само содержание свитка, а не то, кто его написал. Так и в HTTP протоколе: среднестатистическому пользователю вообще неинтересно как он получает страницы сайта, он просто открывает свой браузер. Еще одно определение слова протокол – это алгоритм, либо последовательность действий. Протокол – это свод правил и предписаний, которые регламентируют то или иное мероприятие. Протокол передачи данных – это стандарт, описывающий правила взаимодействия функциональных блоков при передаче данных.

Итак, мы определились, что HTTP – это протокол передачи данных, но что означает аббревиатура HTTP? HTTP или HyperText Transfer Protocol – это протокол передачи гипертекста. А теперь я приведу наиболее интересные определение HTTP протокола, которые когда-либо встречал.

HTTP протокол – это правила дорожного движения в интернете, только если в жизни люди могут не соблюдать правила дорожного движения и им за это ничего не будет, то несоблюдение правил HTTP протокола ведет к тому, что пользователь не сможет работать в интернете.

HTTP протокол – это протокол передачи данных седьмого уровня модели OSI, работающий на основе технологии клиент-сервер.

HTTP протокол – это абстракция над третьи и четвертым уровнем эталонной модели, расширяющая возможности коммуникаций между людьми.

HTTP протокол – изначально простой протокол передачи гипертекста, по которому сейчас можно передавать все, что угодно.

HTTP протокол – это транспорт для других протоколов, например, так как JSON.

HTTP протокол – это технология, которую должен понимать любой веб-разработчик.

Что же, я думаю, мы разобрались с тем, что такое HTTP протокол и можем теперь посмотреть, где он используется.

Для чего используется HTTP протокол

Скажу прямо HTTP протокол – это основа интернета, точнее не так, это та основа, которую видит конечный потребитель: посетители сайтов. Поэтому HTTP протокол в интернете везде. Фраза странно звучит, но другой я придумать не смог. Читая новости на сайте, вы используете HTTP протокол. Слушая музыку Вконтакте, вы используете HTTP протокол. Когда вы смотрите видео на YouTube – вы используете HTTP протокол. Когда вы играете в браузерную игру, вы тоже используете HTTP протокол. Поэтому я и пишу, что HTTP протокол используется везде в интернете. Без него вы бы не смогли и этот текст прочитать. Подведем итог: HTTP протокол используется для передачи данных в интернете, изначально он использовался для передачи HTML документов, но сейчас он позволяет передавать различный контент и различные типы данных.

Характеристики HTTP протокола

Давайте перечислим технические характеристики HTTP протокола:

  1. HTTP протокол работает по технологии клиент-сервер.
  2. HTTP протокол относится к седьмому уровню модели OSI.
  3. HTTP протокол относится к семейству протоколов TCP/IP.
  4. Для передачи данных по протоколу HTTP используется порт 80 TCP или 8080.
  5. Спецификация протокола RFC 2616.
  6. Для идентификации ресурса HTTP протокол использует URI (читай про URI в HTTP).
  7. HTTP протокол не имеет промежуточных состояний между запросом и ответом, конечно, клиент может получить ответ с кодом 100, но это ведь уже ответ, а не промежуточное состояние.
  8. HTTP протокол синхронный, но позволяет клиенту отправлять несколько запросов подряд, не дожидаясь ответа сервера, при условии, что сервер даст ответы на запросы в том порядке, как они приходили.

Это лишь часть технических характеристик протокола, но на мой взгляд, самых важных характеристик для понимания его сути.

HTTP протокол работает по принципу клиент-сервер

Да, HTTP протокол работает по принципу клиент-сервер. Самый простой пример, что приходит мне сейчас в голову, дабы объяснить суть взаимодействия клиент-сервер, это пример покупателя и продавца в магазине. Покупатель приходит в магазин и говорит продавцу: Здрасти!. Если продавец грубый, он отвечает: забор покрасти!. Дальше покупатель улыбается, стоит, смотрит на витрину и выбирает: чего бы ему купить. А в это время продавец стоит и молчаливо ждет, пока клиент выберет. Клиент сделал выбор и говорит продавцу: а дайте мне вон ту коричневую хрень, что стоит на верхней полке в дальнем углу. Продавец говорит: щас. После чего берет табурет ставит его в дальний угол, снимает с полки коричневую хрень и несет покупателю. Покупатель берет коричневую хрень, отдает деньги и уходит. А продавец, получив деньги, кладет их в кассу.

Суть этой истории в том, чтобы показать взаимодействие клиент-сервер. Клиент (в данном случае покупатель) полностью управляет развитием событий, то есть сервер (в нашем примере продавец) ни в коем случае сам не устанавливает контакт, он терпеливо ждет действий клиента и каким-то образом на них реагирует. Я привел самый простой пример. Но его можно и усложнить, например, покупатель дает сто рублей, а коричневая хрень стоит 90, в этом случае продавец даст клиенту сдачу. Продавец мог отреагировать на слова клиента: Здрасти!, как-нибудь по-другому. Или коричневая хрень могла быть не для продажи или для продажи, но только для особых клиентов. Я это веду к тому, что HTTP протокол – это протокол передачи данных основанный на взаимодействие клиент-сервер и он, в принципе, довольно полно описывает алгоритмы действия как для клиента, так и для сервера в различных ситуациях.

История HTTP: стандарты HTTP  протокола

Давайте теперь рассмотрим историю HTTP протокола на его стандартах.

  1. Стандарт HTTP/0.9 – версия протокола HTTP9 была разработана в 1991 году в ЦЕРН Тимом Бернерсом-Ли. Тим разработал HTTP протокол для облегчения доступа и создания навигации при помощи гипертекста. Стандарт HTTP/0.9 содержит в себе основы синтаксиса и семантики протокола HTTP.
  2. В 1996 году был выпущен информационный документ RFC 1945 (стандарт HTTP/1.0).
  3. В 1997 году была выпущена версия протокола HTTP1: был разработан стандарт HTTP/1.1 и описан он в документе RFC 2068. В 1999 году был доработан стандарт HTTP/1.1 (именно стандарт HTTP/1.1). На данный момент большинство приложений для своей работы используют HTTP протокол версии 1.1. Кстати, HTTP приложения могут себя идентифицировать, посылая информацию о себе в заголовке.
  4. 2015 году была опубликована финальная версия черновика протокола HTTP 2, это еще не стандарт, но черновик нам «показывает» куда будет двигаться развитие интернета.

Клиенты HTTP протокола

Самым распространенным примером клиента HTTP протокола является браузер, вот самые популярные клиенты HTTP протокола:

  • Google Chrome;
  • Mozilla FireFox;
  • Opera;
  • Internet Explorer;
  • Яндекс Браузер;
  • Safari.

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

Серверы HTTP протокола

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

Вот примеры конечных HTTP серверов:

  • Apache HTTP Server;
  • CERN httpd;
  • nginx;
  • lighthttod.

Давайте посмотрим на прокси-сервера:

  • Squid;
  • UserGate;
  • nginx.

На самом деле список гораздо шире, хочу обратить ваше внимание на то, что внутренняя реализация у серверов может быть разной, но правила HTTP протокола они должны выполнять в точности. Для обычного пользователя работа сервера – это его интимное дело, а вот у веб-администратора есть необходимость знать тот или иной программный продукт, чтобы сделать работу пользователя или разработчика наиболее эффективной и комфортной.

Требования HTTP протокола

HTTP протокол имеет требования к приложениям, которые используют его для передачи данных. Требований в HTTP очень много, но требования можно разделить на три категории: необходимые требования,  это такие требования, которые должны выполняться всеми программами; рекомендуемые требования, это те требования, которые следует выполнять приложениям и возможные требования, которые могут не выполняться приложениями.

Структура HTTP протокола

Структура HTTP протокола – словосочетание, не совсем точно описывающее то, о чем пойдет речь, правильнее было бы написать структура HTTP сообщения, но если к сообщению добавить HTTP соединение, то как раз получается цельная структура HTTP протокола. Итак, структура HTTP протокола очень простая – это сообщение плюс соединение. Сообщение обычно состоит из трех частей, которые передаются и клиентами, и серверами в следующем порядке:

  1. Стартовая строка или строка состояния, которая определяет тип HTTP сообщения. Стартовая строка обязательна для любого сообщения.
  2. Заголовок HTTP сообщения, который может включать одно поле Host или несколько полей для передачи различной служебной информации.
  3. Тело HTTP сообщения, которое содержит HTTP объекты. Тело сообщения служит для передачи пользовательской информации и есть не у каждого HTTP сообщения.

Терминология HTTP протокола

Создатели HTTP протокола не только разработали стандарт, которому необходимо следовать разработчикам клиентов и серверов, но и придумали термины HTTP протокола, со списком терминов HTTP вы сможете ознакомиться на моем блоге.

Параметры HTTP протокола

У HTTP протокола есть параметры, которые являются механизмом управления взаимодействия между клиентом и сервером. И которые определяют то, в каком виде информация будет передана по HTTP протоколу:

  1. Версия HTTP протокола является его обязательным параметром и указывается в первой строке любого HTTP сообщения.
  2. URI – это параметр, который позволяет однозначно идентифицировать ресурс, который хочет запросить клиент.
  3. Дата и время – это тоже параметр HTTP протокола.
  4. HTTP протокол имеет параметры кодирования сообщений и кодирования передачи.
  5. Тип данных или медиа тип – очередной параметр HTTP протокола.
  6. Лексемы программ позволяют определить разработчика HTTP приложения и версию приложения, а еще лексема является параметром HTTP протокола.
  7. HTTP протокол имеет параметры, которые позволяют определить язык сообщения, в HTTP это называется метка языка.
  8. А еще в HTTP есть единицы измерения диапазонов, которые позволяют запросить только часть ресурса.

Как происходит общение по протоколу HTTP: HTTP сообщение, HTTP запрос и HTTP ответ

Основной и единственной единицей измерения в HTTP протоколе является байт. Основным и единственным способом общения в HTTP протоколе является HTTP сообщение. Сообщения делятся на два вида: HTTP запрос – это сообщение, которое клиент посылает серверу и HTTP ответ – это сообщение, которое сервер посылает клиенту. В принципе, мы уже разобрались со структурой HTTP сообщения ранее, давайте теперь посмотрим примеры запросов и ответов в HTTP протоколе.

Давайте сначала посмотрим на то, что есть общего у любого сообщения в HTTP протоколе. Первое, что хочется выделить – это структура, она общая: статусная строка обязательна для всех сообщений, далее идет заголовок сообщения, в котором обязательное поле Host (в него записывается URI ресурса) и необязательное тело сообщения или, как его еще называют HTTP объект.

Статусная строка отделяется от заголовка символом CRLF в конце этой самой строки от HTTP заголовка (этот символ в Windows вы можете получить, нажав клавишу Enter – перенос строки), а HTTP заголовок отделяется от тела сообщения строкой, в которой только один символ – CRLF.

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

  1. Любое HTTP сообщение ответа сервера, которое не должно включать тело сообщения, всегда должно быть завершено пустой строкой после заголовков.
  2. Если в заголовках HTTP сообщений присутствует поле Transfer-Encoding (кодирование HTTP) при это у этого поля значение chunked, то длину HTTP сообщения следует определять методом кодирования по кускам (chunked encoding).
  3. Если у заголовка HTTP сообщения есть поле Content-Length, то значение, которое записано в Content-Length является длиной HTTP сообщения, измеряется в байтах.
  4. Если HTTP сообщение использует медиа типы «multipart/byteranges», который само разграничен, то он и определяет длину.
  5. Длина HTTP сообщения определяется закрытием соединения со стороны сервера.

Для ясности давайте рассмотрим примеры сообщений в HTTP протоколе и первое, что мы рассмотрим –  пример запроса в HTTP протоколе:

Простой пример запроса в HTTP протоколе: сначала идет статусная строка, в которой мы указываем версию протокола HTTP и метод, который будет использован для обращения к ресурсу, а скрипт, находящийся по URL /cgi-bin/process.cgi будет использован для обработки данных. Статусная строка отделена символом CRLF в конце от заголовка, далее идет набор полей HTTP заголовка, которые отделяются друг от друга символом CRLF в конце строки. Если у одного поля есть несколько значений, то они отделяются друг от друга запятой.  Тело сообщения отделено пустой строкой. Значение и описание всех полей заголовка HTTP протокола вы сможете найти на моем блоге в специальной записи: список полей HTTP заголовка.

А вот пример ответа в протоколе HTTP:

Синтаксис ответа в протоколе HTTP практически ничем не отличается, ключевым отличием является то, что в первой строке сервер посылает коды статуса, о которых мы поговорим чуть ниже.

Методы в HTTP протоколе

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

Методы в HTTP протоколе делятся на безопасные и идемпотентные. К безопасным относятся методы GET и HEAD, потому что они используются лишь для получения содержимого или его характеристик от сервера, а идемпотентные методы, это такие методы HTTP протокола, которые в случае своего многократного использования к ресурсу на одном и том же URI от одного и того же клиента будут давать такую же нагрузку, как будто этот метод выполнился только один раз, к идемпотентным методам HTTP протокола относятся: GET, HEAD, PUT, DELETE, OPTIONS и TRACE.

Давайте коротко рассмотрим методы HTTP протокола и их назначение:

  1. Метода GET в HTTP протоколе используется для получения информации от сервера по заданному URI. Запросы клиентов, использующие метод GET должны получать только данные и не должны никак влиять на эти данные.
  2. Метод HTTP протокола HEAD работает точно так же, как GET, но в ответ сервер посылает только заголовки и статусную строку без тела HTTP сообщения.
  3. Метод HTTP протокола POST используется для отправки данных на сервер, например, из HTML форм, которые заполняет посетитель сайта.
  4. Метода HTTP протокола PUT используется для загрузки содержимого запроса на указанный в этом же запросе URI.
  5. Метод HTTP протокола DELETE удаляет указанный в URI ресурс.
  6. Метод HTTP протокола CONNECT преобразует существующее соединение в тоннель.
  7. Метод HTTP протокола OPTIONS используется для получения параметров текущего HTTP соединения/.
  8. Метод HTTP протокола TRACE создает петлю, благодаря которой клиент может увидеть, что происходит с сообщением на всех узлах передачи.

Как происходит соединение по HTTP протоколу

На данный момент для каждого HTTP соединения HTTP протокол поддерживает постоянные TCP соединения, это означает, что при повторном запросе к серверу с одним и тем же IP-адресом, соединение четвертого уровня рваться не будет, а будет использовано существующее. Раньше это было не так и, если в HTML документе были картинки, то для загрузки каждой картинки использовалось новое соединение TCP/IP.

Обсуждение содержимого в HTTP протоколе

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

Прокол HTTP имеет два вида обсуждения: обсуждение, управляемое сервером и обсуждение, управляемое клиентом. Стоит отметить, что эти два вида обсуждения HTTP независимы друг от друга и могут использоваться вместе.

Коды состояния в HTTP протоколе

Коды состояния в HTTP протоколе говорят клиенту о том, что произошло с его запросом, как сервер понял запрос и нужно ли делать что-нибудь клиенту, чтобы запрос был выполнен корректно. Коды состояния – это три цифры, например, 100, 301, 404, 503. Коды состояния в HTTP протоколе делятся на пять классов состояния: информационные коды (они начинаются с единицы), успешные коды (начинаются с двойки), коды перенаправления (начинаются с тройки), коды ошибок клиента (начинаются с четверки), коды ошибок сервера (начинаются с пятерки). Ниже приведена таблица классов кодов состояния их короткое описание. А еще вы можете посмотреть справочник кодов состояния.

Номер Класс кода состояния в HTTP протоколе и его описание
1 HTTP коды состояний 1xx: информационные

Такой код состояния сервер высылает в том случае, когда запрос получен, но еще не обработан.

2 HTTP коды состояний 2xx: успешные

Сервер отправит вам такой код в том случае, когда он успешно принял и обработал HTTP сообщение клиента.

3 HTTP коды состояний 3xx: перенаправление

Если вы получили от сервера код состояния, начинающийся на тройку, то это означает, что нужны дополнительные действия, чтобы завершить процесс обработки HTTP запроса.

4 HTTP коды состояний 4xx: ошибка клиента

Если вы увидели код состояния, который начинается с четверки, то это означает, что произошла ошибка по вине клиента.

5 HTTP коды состояний 5xx: серверная ошибка

Код состояния, начинающийся с пятерки, говорит о том, что произошла ошибка на стороне сервера.

Поля заголовка HTTP сообщения

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

Поля заголовка разделяются между собой символом CRLF. HTTP протокол делит поля заголовка на четыре группы:

  1. Общие поля заголовка. Такие заголовки могут быть использованы в любых сообщениях, передаваемых по HTTP протоколу.
  2. Поля заголовка запросов. Эти сообщения могут быть переданы только в запросах HTTP протокола.
  3. Поля заголовка ответов. Как понятно из названия, эти поля используются только при HTTP ответах.
  4. Поля заголовка тело сообщения. А эти поля используются тогда, когда необходимо определить, как и в каком виде будет представлена информация конечному пользователю, которая передается по HTTP.

Более подробно о полях заголовков HTTP сообщения смотрите справочник полей заголовка HTTP сообщения.

Кэширование HTTP протокола

С целью уменьшения нагрузки на сеть и повышения эффективности HTTP протокола был реализован механизм кэширования. Зачастую бывает так, что пользователь даже не догадывается о том, что страница, открытая в его браузере, подгрузилась не с сайта, к которому он обращался, а из кэша. Мы не будем вдаваться во внутренние механизмы кэширования того или иного сервера/клиента, а лишь посмотрим, что есть непосредственно у протокола HTTP для управления кэшированием. И, как вы наверное уже догадались, в HTTP протоколе кэшированием управляют поля заголовка и директивы, то есть значения этих самых полей.

Отмечу, что HTTP протокол реализован так, что этим директивам должны следовать все участники цепочки между клиентом и конечным сервером. Директивы условном можно поделить на клиентские и серверные. Давайте посмотрим на директивы HTTP протокола, предназначенные для управления кэшированием со стороны клиента.

Номер Директивы поля заголовка CacheControl для клиента и их описание
1 nocache

Директива HTTP протокола no-cache говорит серверу о том, что для последующего запроса ответ не должен отправляться из кэша без проверки с содержимым исходного сервера.

2 nostore

Директива HTTP протокола no-store говорит серверу о том, что ни запрос клиента, ни ответ сервера не должны кэшироваться. Это сделано для безопасности.

3 maxage = seconds

Директива HTTP протокола max-age говорит серверу о том, что кэш должен быть не старше времени, которое указано в секундах.

4 maxstale [ = seconds ]

Директива HTTP протокола max-stale говорит серверу о том, что клиент примет кэшированный HTTP ответ в том случае, если его возраст не превышает времени, указанного в секундах.

5 minfresh = seconds

Директива HTTP протокола min-fresh говорит серверу о том, что клиент примет кэшированный HTTP ответ в том случае, если время жизни кэша не больше указанных секунд.

6 Директива HTTP протокола min-fresh говорит серверу о том, что к запрашиваемому ресурсу не должно применяться никаких преобразований.
7 onlyifcached
Директива HTTP протокола min-fresh говорит серверу о том, что клиент примет только кэшированный HTTP ответ, если подходящего ответа нет в кэше сервера, то делать ничего не надо.

А теперь взглянем на директивы, позволяющие управлять кэшированием по HTTP протоколу серверу.

Номер Директивы поля заголовка CacheControl для сервера и их описание
1 public

Директива HTTP протокола Public говорит о том, что ответ сервера можно сохранять в любом кэше.

2 private

Директива HTTP протокола private говорит о том, что ответ сервера нужно сохранять в закрытом кэше, который предназначен только для этого пользователя.

3 nocache

Директива HTTP протокола nocache говорит о том, что кэшированный ответ не должен отправляться клиенту без его предварительной проверки.

4 nostore

Директива HTTP протокола nostore говорит о том, что ответ сервера нельзя сохранять в кэше.

5 notransform

Директива HTTP протокола notransform говорит о том, что к ответу сервера не должно применяться никаких преобразований ни одним из узлов цепочки.

6 mustrevalidate

Директива HTTP протокола mustrevalidate говорит о том, что если HTTP сообщение сервера устарело, то к нему должна применяться предварительная проверка.

7 proxyrevalidate

Директива HTTP протокола proxyrevalidate говорит о том, что и предыдущая директива, но только для промежуточных серверов.

8 maxage = seconds

Директива HTTP протокола maxage говорит о том, сколько живет кэш на сервере.

9 Директива поля заголовка CacheControl ответа сервера: smaxage = seconds

Директива ответа сервера Public говорит о том, что и директива max-age, но для CDN-серверов

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

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

А еще HTTP протокол позволяет присваивать каждому HTTP объекту тэг в поле заголовка ETag, по сути, это хэш сумма самого объекта и для каждого неповторяющегося объекта она уникальная, поэтому механизм кэширования HTTP протокола активно использует данное поле для проверки актуальности данных, которые хранятся в кэше.

zametkinapolyah.ru

You May Also Like

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.