Протокол HTTP — что такое HyperText Transfer Protocol. Что такое HTTP

Если вы хотели узнать, как передаются данные в интернете - эта статья для вас. Я расскажу вам все что знаю о протоколах HTTP и HTTPS, покажу разницу и отличия между ними. Приятного чтения!

HTTP 1.1 - что это за протокол?

HTTP (англ. «протокол передачи гипертекста») - сетевой протокол верхнего уровня для передачи гипертекстовых и произвольных данных в интернете.

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

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

Актуальная версия протокола - 1.1. Ее описание находится в спецификации RFC.

HTTP используется в клиент-серверной инфраструктуре передачи данных. Как это работает? Приложение на стороне «клиент» формирует запрос для обработки на стороне «сервер», после чего ответ отправляется обратно «клиенту». Затем «клиент» может инициировать дополнительные запросы, получать новые ответы. И так далее.

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

Более того, HTTP часто выступает как протокол-транспорт для трансфера других прикладных протоколов и их API: WebDAV, XML-RPC, REST, SOAP. Ну а данные передаваемые по API могут иметь самый разный формат: XML, JSON и другие.

Как передаются эти данные? Чаще всего по TCP/IP-соединению: приложение-клиент по умолчанию использует TCP-порт 80, а сервер может использовать любой другой, но обычно это тоже 80 порт.

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

Второй особенностью HTTP является отсутствие сохранения состояния между последовательными парами «запрос-ответ». Но это не проблема, потому что компоненты приложений на клиентской или серверной стороне само могут хранить информацию о состоянии последних запросов и ответов. На стороне клиента такая информация называется cookies («куки»), на стороне сервера - sessions («сессии»).

При этом для клиентского браузера не проблема следить за задержкой ответа сервера, а для сервера - хранить заголовки последних запросов и IP-адреса клиентов. Но, еще раз подчеркну, сам протокол об этом ничего не знает - он только передает данные.

Принимать участие в передаче данных могут и посредники (прокси-сервера), для того чтобы отличить прокси от конечных серверов (т.н. «исходный сервер»).

Самое волшебство начинается, когда одна и та же программа (клиентская или серверная) может выполнять функции посредник, клиента, сервера - в зависимости от задач.

HTTP/2 - а это что за протокол?

Первоначальная версия протокола HTTP появилась в ЦЕРНЕ (CERN) в 1991 году. Уже в 1992 году была опубликована публичная версия HTTP 0.9 и его спецификация, благодаря чему были упорядочены правила взаимодействия между клиентскими и серверными приложениями, а также четкому разграничению функциональности.

В 1996 году появился HTTP/1.0, а современная версия протокола - HTTP/1.1 - в 1999 году. На рубеже тысячелетий, протокол HTTP научился поддерживать режим постоянного соединения, т.е. оставлять соединение открытым после того как получен ответ на запрос. Это позволило за одно соединение посылать сразу несколько запросов, а не открывать-закрывать сессию каждый раз.

Шло время и по мере развития интернета размер страниц увеличивался, росло количество запросов - требовалось все больше ресурсов. Так сформировалась потребность в новом протоколе.

И спустя шестнадцать лет, в 2015 году была опубликована финальная версия черновика спецификации следующей версии протокола - HTTP/2. Бинарный протокол HTTP/2 более подготовлен к современным реалиям, чем прародитель HTTP 1.1 потому что новый протокол решает наиболее существенную проблему передачи данных в интернете - несколько отрытых соединений.

А все потому что нынешние сайты подгружают много элементов, как со своего сервера, так и с CDN: JS-скрипты, CSS-стили, шрифты и картинки. При передаче полного комплекта файлов по протоколу HTTP 1.1 создается несколько соединений. Если мы в будущем перейдем на протокол HTTP/2 - передача будет происходить в рамках одного соединения между клиентом и сервером, что позволит существенно ускорить и оптимизировать загрузку содержимого сайта.

Ключевые особенности HTTP/2, которые будут полезны для сайтов:

  • Расстановка и управление приоритетами запросов/потоков - клиент самостоятельно задает для сервера приоритетность ресурсов и данных
  • Сжатие HTTP заголовков;
  • Мультиплексирование запросов или параллельная загрузка по TCP-соединению нескольких элементов сайта - через одно соединение отправляется несколько запросов, а ответы клиент может получать в любом порядке т.е. теперь не нужны несколько открытых TCP-соединений;
  • Наличие и поддержка со стороны сервера проактивных push-уведомлений - сервер самостоятельно может отправлять данные для клиента, которые тот еще не запросил (например на основании информации о том, какую страницу пользователь откроет после этой).

Конечно, главное здесь это мультиплексирование потоков. Принцип работы объяснить проще простого: пакеты TCP/IP-соединения смешиваются в рамках одного соединения. Так, в смешанном режиме происходит соединение нескольких «вагонов данных» в один «состав поезда», которые разделяются «по приезду». Ранее «вагоны» были вынуждены ехать дольше и раздельно, сейчас они будут ехать вместе и быстрее.

Вышеперечисленные преимущества протокола HTTP/2 позволят веб-разработчикам дышать полной грудью и отказаться от таких «костылей» как:

  • Использование большего числа родственных доменов для обеспечения установки большого количества TCP/IP-соединений (для скачивания файлов);
  • Спрайты картинок - когда изображения объединяются в один файл, чтобы снизить число запросов к веб-серверу (а сам файл «раздувается» ведь в него записано больше изображений);
  • Объединение CSS- и JS-файлов, которые тоже делаются для уменьшения запросов.

Последнее очевидное преимущество заключается в том, что с самим сайтом (для включения HTTP/2) ничего дополнительно делать не нужно - все работы проводятся на сервере чуть ли не в «1 клик», а для клиентов shared- и VPS-хостингов вообще пройдут незаметно.

Словом, заживем!

HTTP/2 создан и разработан на основе черновика протокола SPDY/3 (Google) и превзошел его - компания Гугл признала преимущества HTTP/2 более многообещающими и в будущем откажется от поддержки SPDY/2.

Прогнозируемое ускорение ответа сервера по протоколу HTTP/2 составит порядка 30%, - реальные тесты уже показали скорости на 19-23% выше и это не предел.

По результатам тестов компании Айри.рф, только от включения протокола HTTP/2 прирост скорости составляет 13-18% (без оптимизации). Почему это важно?

Несмотря на то, что поддержка сайтом протокола HTTP/2 на данный момент не влияет напрямую на ранжирование сайтов в Гугле и Яндекса, на позиции в выдаче влияет скорость загрузки. И раз протокол показывает более высокую скорость загрузки (что является довольно значительным фактором), косвенно он влияет и на ранжирование.

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

Большая часть современных браузеров уже поддерживает HTTP/2 - через них проходит ~70% интернет-трафика:

  • Chrome 41-52 и Chrome 46+ в Android;
  • Firefox 36-48 и Firefox 41+ в Android;
  • Opera 28-34 и Opera 30+ в Android;
  • Safari 9 и Safari в iOS 9.1;
  • IE 11 в Windows 10 и браузер Edge 12, 13.

Когда произойдет полноценный переход на HTTP/2 пока непонятно - вероятнее всего в самом ближайшем будущем. Главное что от HTTP/1.x никто не собирается поспешно отказываться. Как говорится: «Работает - не трогай».

Что значит и где применяется HTTPS-протокол?

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

Проблема в том что данные по HTTP не защищаются и передаются в открытом виде. Интернет - глобальная распределенная сеть узлов. И если вы передаете открытые данные по незащищенному протоколу (Wi-Fi в ТРЦ сюда тоже относится), то один из этих узлов может перехватить их.

Не специально конечно, может быть просто взлом усилиями злоумышленников. HTTPS и создан для того чтобы соединение было безопасным, а данные передавались в зашифрованном виде по криптографическому протоколу SSL/TLS. Это специальная «обертка» поверх HTTP, она шифрует данные, делая их недоступными для злоумышленников и посторонних людей.

HTTPS - англ. «безопасный протокол передачи гипертекста».

Так что в отличие от 80 порта, используемого по умолчанию в HTTP, в HTTPS используется TCP-порт 443 и есть ключ для шифрования. Ключ может быть длиной 40, 56, 128 или 256 бит, достаточный уровень безопасности на данный момент начинается со 128-битных ключей.

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

Жизненно важно использовать HTTPS в следующих сервисах:

  • Электронные платежные системы (банки, электронные деньги и прочее);
  • Сервисы принимающие и отправляющие приватную информацию и персональные данные, например у Яндекса это: Паспорт, Такси, Директ , Метрика, Почта, Деньги , Вебмастер и другие;
  • Социальные сети и личные кабинеты в интернет-сервисах;
  • Поисковые системы.

Работает HTTPS просто. Объясню на примере.

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

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

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

Все - вот так просто работает HTTPS.

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

Единственный нюанс здесь - надо знать, что вы отправляете данные именно туда, куда нужно. И что конечный пункт и является пунктом назначения. Но нужно подтвердить и точно знать, что конечный адресат существует и управляется тем самым сервером, куда отправляются данные.

Для этого серверы получают в центрах сертификации специальные HTTPS-сертификаты безопасности, которые подтверждают «конечность» пункта назначения (что сайт не является узлом передающим данные дальше) и работоспособность технологии шифрования SSL/TLS, т.е. безопасность соединения.

А вот как выглядит сам сертификат:

На текущий момент HTTPS встроен во все современные браузеры и все что требуется от пользователя для поддержания безопасности отправки данных по HTTPS - регулярно обновлять программное обеспечение для серфинга, приема и отправки важных данных в интернете.

Осуществляя взаимодействие «клиент-сервер» по протоколу HTTPS можно не беспокоиться за сохранность данных - вы надежно защищены от прослушивания сетевого соединения: атак снифферов и man-in-the-middle.

Что означает перечеркнутый значок HTTPS и зеленый значок HTTPS, в чем разница? В безопасности. Зеленый - безопасный, красный и перечеркнутый - небезопасный.

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

Что лучше HTTP 1.1, HTTP/2 или HTTPS?

В качестве подведения итога затрону тему предпочтительного использования протоколов.

Понятно, что на данный момент HTTP 1.1 - наиболее распространенный протокол и используется по умолчанию. Время HTTP/2 еще не пришло, но вскоре большая часть интернет-трафика будет идти через вторую версию протокола HTTP. Это упростит жизнь пользователям, потому что сайты будут загружаться быстрее. Администраторы серверов и сайтов тоже будут рады, потому что новый протоко позволяет по новому оптимизировать сайты, ускоряя загрузку и отдачу данных.

При этом, вряд ли возможно, что все сайты перейдут HTTPS, потому что для целей потребления развлекательного контента шифрование ни к чему. Да, сейчас уже 10% сайтов используют HTTPS в рейтинге наиболее посещаемых веб-ресурсов «Alexa». Но это всего десять процентов, среди которых такие гиганты как Гугл, ПейПал, Амазон, Алиэкспресс и другие. То есть множество сайтов, где не использовать HTTPS означает нарушать право интернет-пользователя на безопасность и сохранность данных.

А обычным сайтам типа блога семи блоггеров HTTPS ни к чему - нет приема персональных или платежных данных, нет регистрации и отправки важных сообщений.

Так что в ближайшем будущем мы станем постепенно отходить от HTTP 1.1 в пользу HTTP/2 и HTTPS.

Протокол HTTP или HyperText Transfer Protocol это главный прокол (всемирной паутины). Основная задача протокола, обеспечить передачу гипертекста в сети. В протоколе точно описывается формат сообщений, для обмена клиентов и серверов.

Описан протокол HTTP в RFC 2616(HTTP1.1).

Основа протокола обеспечить взаимодействие клиента и сервера по средством одного ASCII-запроса, и следующего на него ответа в стандарте RFC 822 MIME.

На практике протокол HTTP работает на основе порт 80, но можно настроить и по-другому. И хоть TCP/IP не является обязательным, он остается предпочтительным, так как берет на себя разбиение и сборку сообщений на себя и не «напрягает» ни браузер, ни сервер.

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

URL

Основой веб-общения клиент-сервер является запрос. Запрос отправляется при помощи URL– единого указателя ресурсов Интернет. Напомню, что такое URL адрес.

Понятная и простая структура URL состоит из следующих элементов:

  • Протокол;
  • Хост;
  • Порт;
  • Каталок ресурса;
  • Метки (Запрос).

Примечание: Протокол http это протокол для простых, не защищенных соединений. Защищенные соединения работают по протоколу https. Он более безопасен для обмена данными.

Методы HTTP запросов

Один из параметров URL, определяет название хоста, с которым мы хотим общаться. Но этого мало. Нужно определить действие, которое нужно совершить. Сделать это можно при помощи метода определенного протоколом HTTP.

Методы HTTP

  • Метод/Описание
  • HEAD/Прочитать заголовок веб-страницы
  • GET/Прочитать веб-страницу
  • POST/Добавить к веб-странице
  • PUT/Сохранить веб-страницу
  • TRACE/Отослать назад запрос
  • DELETE/Удалить веб-страницу
  • OPTIONS/Отобразить параметры
  • CONNECT/Зарезервировано для будущего использования

Разберем методы HTTP подробнее

Метод GET. запрашивает страницу (файл, объект), закодированную по стандарту MIME. Это самый употребляемый метод. Структура метода:
GET имя_файла HTTP/1.1

Метод HEAD. Этот метод запрашивает заголовок сообщения. При этом страница не загружается. Этот метод позволяет узнать время последнего обновления страницы, что нужно для управления КЭШем страниц. Этот метод позволяет проверить работоспособность запрашиваемого URL.

Метод PUT. Этот метод может поместить страницу на сервер. Тело запроса PUT включает размещаемую страницу, которая закодирована по MIME. Это метод требует идентификации клиента.

Метод POST. Этот метод добавляет содержимое к уже имеющейся странице. Используется, как пример, для добавления записи на форум.

Метод DELETE. Этот метод уничтожает страницу. Метод удаления требует подтверждения прав пользователя на удаление.

Метод TRACE. Этот метод отладки. Он указывает серверу отослать запрос назад и позволяет узнать, искажается или нет, запрос клиента, вернувшись от сервера.

Метод CONNECT – метод резерва, не используется.

Метод OPTIONS позволяет запросить свойства сервера и свойства любого файла.

В общении клиента и сервера «запрос-ответ», сервер обязательно генерирует ответ. Это может быть веб-страница или строку состояния с кодом состояния. Код состояния вам хорошо известен. Один из кодов известный код 404 –Страница не найдена.

Группы кодов состояния

1хх: Готовность сервера, Код 100 – сервер готов обрабатывать запросы клиента;

2хх: Успех.

  • Код 200 – запрос обработан успешно;
  • Код 204 – Содержимого нет.

3хх: Перенаправление.

  • Код 301 – Запрашиваемая страница перенесена;
  • Код 304 – Страница в КЭШе еще актуальна.

4хх: Ошибка клиента.

В скором времени интернет перейдёт на протокол HTTP/2, который значительно оптимизирует работу сайтов, а весь мир перейдёт на новые стандарты работы в глобальной сети, новые стандарты безопасности и, в конечном счёте, стандарты скорости передачи информации. Всё это обеспечивается при помощи протокола HTTP/2 — улучшенной версии классического протокола http, на котором до сих пор работает практически весь мировой интернет. Описание нового алгоритма передачи данных в Сети.

Что это такое и зачем он нужен

HTTP, или HyperText Transfer Protocol, или протокол передачи гипертекста – набор правил и протоколов, по которым сегодня работает глобальная паутина. Он формирует правила для передачи графических файлов, текстовых сообщений, звуковых и мультимедийных файлов — иначе говоря, правила подачи визуального отображения информации в интернете. HTTP/2 – это новое поколение данных протоколов, ведь HTTP/1.1 служит с 1999 года, и с тех пор большинство современных сайтов уже не может довольствоваться поддержкой устаревшей технологии HTTP. Переход на новую версию не заставляет себя ждать.

Чем отличается http/2 от http

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

При этом HTTP/2 — это лишь расширение для HTTP1, замены которого, пока что не планируется. Вторая версия протокола будет совместима с первой версией. Все преимущества новой версии со временем будут только дополнятся и улучшаться, регулярно будут вноситься изменения, HTTP/2 будет постоянно эволюционировать. Обновлённый протокол будет содержать алгоритм всех вариантов шифрования, доступных при старой версии, но со временем более подходящие варианты шифрования определённо будут открыты.

Следует понимать, что со времени появления HTTP1.1 прошло много времени, веб претерпел огромные изменения и необъятно расширился, поэтому необходимо залатать все те дыры, которые возникли за более чем десятилетний промежуток времени со времён разработки первой версии.

Возможности

Данный протокол серьёзно оптимизирует работу веб-сайтов за счёт нескольких преимуществ:

  • постоянные соединения : ранее для запроса любого отдельного URL требовалось создавать отдельные TCP-соединения, теперь существует одно соединение на все;
  • приоритеты потоков : можно устанавливать приоритетность на серверах — какие ресурсы для вас важнее;
  • сжимание заголовков : можно сжать размер HTTP-заголовка;
  • пуш-отправка данных : сервер способен отправлять вам те или иные данные ещё до запроса.

Мультиплексирование

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

При работе с http1, при загрузке странички, загружается HTML-страница, система видит, что ей нужны какие-то файлы: CSS, изображения, javasсriрt и т.п. Ваш браузер сначала прогружает страницу, а уже потом делает запрос на CSS. После этого запрашивается скрипт. Затем картинка и так далее. Вы можете работать только с одним из них по по очереди.

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

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

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

Приоритетность

Возможность приоритизации — еще одно новшество в HTTP/2. Теперь каждому запросу может быть назначен приоритет . Существует два способа присвоения приоритета: по весу или на основе зависимостей.

При первой концепции каждому потоку присваивается вес. На основе этого веса сервер перераспределяет нагрузку меж потоками.

Второй и первичный подход HTTP/2 предполагает, что браузер сначала запрашивает сервер для возврата определенного контента на основе типа; к примеру, браузер может сначала запросить файлы CSS или JS, затем HTML, а затем изображения.

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

Что даёт приоритезация:

  • Более эфективная работа в сети.
  • Сокращение временных затрат.
  • Ускорение времени загрузки веб-страниц.
  • Оптимизация передачи данных между сервером-клиентом .

Сжатие заголовков

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

В HTTP/2 заголовки сжимаются . Это уменьшает объем обмена информацией между сервером и браузером. Вместо алгоритмов gziр/deflate используется HPACK, как самый удобный и простой подход к сжиманию заголовков. Это также уменьшает уязвимость от атак BREACH. Использование HPACK даёт множество преимуществ:.

  • Снятие дополнительной нагрузки и расхода ресурсов.
  • Сокращение индивидуального размера передающихся данных после сокращения заголовка.
  • Неуязвимость перед атаками безопасности .

Server push

HTTP/2 Server Push — это одна из функций повышения производительности, включенных в версию 2 протокола HTTP. Это позволяет веб-серверу заранее предоставлять информацию клиенту (ещё до запроса), которую он в будущем может запросить. HTTP/2 Server Push основан на том, что клиент, требующий ту или иную информацию, в будущем затребует другую информацию. Иначе говоря, идёт игра не опережение

Как работает Push на примере: Ваш браузер запрашивает веб-траницу (index.html в нашем примере), а сервер возвращает вам три объекта: index.html, а также два дополнительных объектоа: scripts.js и styles.css, которые хранятся в специальном кеше, зарезервированном для этой цели. Затем клиент анализирует index.html и понимает, что для загрузки страницы нужны три объекта: scripts.js, styles.css и image.jpg. Первые два уже находятся в кеше браузера, поскольку они были сохранены сервером, поэтому клиенту просто нужно запросить image.jpg на сервере, чтобы отобразить страницу.

Данная функция имеет многочисленные плюсы:

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

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

Ssl и шифрование

Переходя на HTTPS/2, вы автоматом переходите на HTTPS , то есть на защищённый режим работы в сети. При этом это единственный режим, в котором будет работать веб-браузер. HTTPS будет шифровать абсолютно весь интернет-трафик и потребует наличия сертификата (сегодня обычный DV-сертификат вы можете найти не потратив ни копейки, к примеру через WoSign SSL certificate, или через Lets Encrypt, хотя Google может прекратить доверие их сертификатам в любой момент, поэтому нужно внимательно следить за повесткой дня).

Бинарность

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

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

Помимо этого, теперь можно очень просто разделить часть связанную с самим протоколом и с пакетом данных, в отличие от устаревшего HTTP1, где это всё было спонтанно перемешано.

Итак, вот основные преимущества бинарного протокола :

  • Очень небольшие дополнительные расходы во время анализа данных .
  • Гораздо меньшая подверженность ошибкам, по сравнению с предыдущей версией протокола.
  • Большая лёгкость в освоении сетевого пространства.
  • Большая эффективность в применении сетевых ресурсов.
  • Ликвидация всех дыр в безопасности и шифровании и регулярных атак, которые были связаны с тем, что HTTP/1.1 базируется на текстовой основе.
  • Сами по себе уникальные возможности HTTP/2, такие как push, мультиплексинг, выстраивание приоритетов, управление потоками, а также оптимизация работы в сети.
  • Упрощение обработки команд и их реализации .
  • Ускорение передачи данных между клиентом и сервером.
  • Существенное снижение сетевых задержек и увеличение пропускной способности.

Поддержка браузерами

На сегодняшний день абсолютное большинство актуальных браузеров: как десктопных, так и мобильных, поддерживают технологию HTTP/2. Первыми из них стали такие гиганты, как Google Chrome и Mozzila Firefox, которые поддерживают данный протокол уже много лет. Позже, видимо следуя их примеру, компания Apple в 2014-м году добавила в свой браузер Сафари поддержку технологии. После этого уже и менее крупные браузеры стали работать в данном направлении. При этом браузер IE Explorer требует версии Windows не меньше 8, чтобы работать с данным протоколом.

Мобильные браузеры не отстают, и уже подключили протокол в большинство существующих платформ . Это касается Андроид-браузера, Хром для Андроида и iOS, Сафари, начиная с iOS 8 — данные мобильные браузеры уже поддерживают HTTP/2. При этом, с течением времени и прониканием технологии в повседневность, зона распространения также постоянно расширяется.

Поисковая оптимизация (SEO)

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

Таким образом, ресурсы работающие по новой версии протокола HTTP, будут получать бонус в ранжировании как раз за счёт скорости прогрузки сайта, ведь . Ещё один плюс заключается в том, что при переходе на http2 вы автоматически переходите на HTTPS, и в итоге также получаете бонус в ранжировании поисковых систем также и использование HTTPS.

Оптимизация сайтов

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

  1. Объединение картинок в CSS-спрайты . В первой версии протокола эффективно объединять маленькие и средние изображения в один спрайт, т.к. требуется единственное соединение. Зато если картинка только одна — прогрузить спрайт придётся полностью. В HTTP2 благодаря мультиплексу есть возможность многочисленных запросов и удобнее загружать несколько маленьких картинок одновременно. Хотя иногда по прежнему рекомендуется объединять изображения в спрайт, чтобы улучшить качество сжатия и загрузочный объём.
  2. Возможность встраивания картинок в тело страницы при помощи data: URI . Это ещё одно распространённое решение проблемы с множественными запросами в старой версии протокола: картинки встраивались в CSS через data: URI. Размер файла при этом может заметно увеличиться, зато потребуется не так много соединений. В HTTP2 данный подход всё ещё может быть актуален, однако не послужит увеличению производительности.
  3. Объединение файлов JS и CSS в единый файл . Таким образом когда загружается страница, сразу загружаются таблицы стилей и код javascript. Помимо этого, браузер кэширует весь этот файл и даже минимальные изменения в коде потребуют перезагрузки всего файла. Мультиплексирование полностью решает данную проблему и избавляет от этого неудобства.
  4. Доменный шардинг . В старой версии http кол-во открытых соединений ограничено. Если необходимо загрузить множество ресурсов сразу, то часто можно прибегнуть к их получению с разных доменов.либо поддоменов основного домена. HTTP/2 создаёт возможность создавать столько ресурсов, сколько заблагорассудится, фактически избавляя от необходимости в данной функции, при этом доменный шардинг отрицательно сказывается на производительности из-за множества открытых TCP-соединений.

Как подключить

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

Для того чтобы проверить наличие поддержки в браузере протокола HTTP2 можно использовать специальные расширения для браузеров Mozzila Firefox и Google Chrome, а также использовать инструмент проверки скорость на веб-0сайте Айри.рф: после проверки должна загореться одна из плашек — если браузер поддерживает протокол HTTP2, то в итогах проверки появится зеленая плашка [НТTР/2.0]. Существуют и другие интернет-сервисы для проверки поддержки модернизированного протокола, один из них — это сервис от http2.pro.

Заключение

Новая эра, в которой будет доминировать HTTP/2 уже почти на носу: протокол уже поддерживается многими браузерами. Эпоха нового веб будет гораздо более быстрой, более безопасной и очень комфортной для использования, уже можно совершенно точно принять то, что http2 — это тот стандарт, по которому мы будем путешествовать в глобальной сети в ближайшем будущем.

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

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

Аббревиатура HTTP расшифровывается как HyperText Transfer Protocol , «протокол передачи гипертекста». В соответствии со спецификацией OSI , HTTP является протоколом прикладного (верхнего, 7-го) уровня. Актуальная на данный момент версия протокола, HTTP 1.1, описана в спецификации RFC 2616 .

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

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

Также HTTP часто используется как протокол передачи информации для других протоколов прикладного уровня, таких как SOAP, XML-RPC и WebDAV. В таком случае говорят, что протокол HTTP используется как «транспорт».

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

Как правило, передача данных по протоколу HTTP осуществляется через TCP/IP-соединения. Серверное программное обеспечение при этом обычно использует TCP-порт 80 (и, если порт не указан явно, то обычно клиентское программное обеспечение по умолчанию использует именно 80-й порт для открываемых HTTP-соединений), хотя может использовать и любой другой.

Как отправить HTTP-запрос?

Самый простой способ разобраться с протоколом HTTP - это попробовать обратиться к какому-нибудь веб-ресурсу вручную. Представьте, что вы браузер, и у вас есть пользователь, который очень хочет прочитать статьи Анатолия Ализара.

Предположим, что он ввёл в адресной строке следующее:

Http://alizar.habrahabr.ru/

Соответственно вам, как веб-браузеру, теперь необходимо подключиться к веб-серверу по адресу alizar.habrahabr.ru.

Для этого вы можете воспользоваться любой подходящей утилитой командной строки. Например, telnet:

Telnet alizar.habrahabr.ru 80

Сразу уточню, что если вы вдруг передумаете, то нажмите Ctrl + «]», и затем ввод - это позволит вам закрыть HTTP-соединение. Помимо telnet можете попробовать nc (или ncat) - по вкусу.

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

Для того, чтобы сформировать HTTP-запрос, необходимо составить стартовую строку, а также задать по крайней мере один заголовок - это заголовок Host, который является обязательным, и должен присутствовать в каждом запросе. Дело в том, что преобразование доменного имени в IP-адрес осуществляется на стороне клиента, и, соответственно, когда вы открываете TCP-соединение, то удалённый сервер не обладает никакой информацией о том, какой именно адрес использовался для соединения: это мог быть, например, адрес alizar.habrahabr.ru, habrahabr.ru или m.habrahabr.ru - и во всех этих случаях ответ может отличаться. Однако фактически сетевое соединение во всех случаях открывается с узлом 212.24.43.44, и даже если первоначально при открытии соединения был задан не этот IP-адрес, а какое-либо доменное имя, то сервер об этом никак не информируется - и именно поэтому этот адрес необходимо передать в заголовке Host.

Стартовая (начальная) строка запроса для HTTP 1.1 составляется по следующей схеме:

Например (такая стартовая строка может указывать на то, что запрашивается главная страница сайта):

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

Удачи и плодотворного обучения!

Теги: Добавить метки

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

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

Также в этой статье я буду, в основном, ссылаться на стандарт RFC 2616 : Hypertext Transfer Protocol -- HTTP/1.1.

Основы HTTP

HTTP обеспечивает общение между множеством хостов и клиентов, а также поддерживает целый ряд сетевых настроек.

В основном, для общения используется TCP/IP, но это не единственный возможный вариант. По умолчанию, TCP/IP использует порт 80, но можно заюзать и другие.

Общение между хостом и клиентом происходит в два этапа: запрос и ответ. Клиент формирует HTTP запрос, в ответ на который сервер даёт ответ (сообщение). Чуть позже, мы более подробно рассмотрим эту схему работы.

Текущая версия протокола HTTP - 1.1, в которой были введены некоторые новые фишки. На мой взгляд, самые важные из них это: поддержка постоянно открытого соединения, новый механизм передачи данных chunked transfer encoding, новые заголовки для кэширования. Что-то из этого мы рассмотрим во второй части данной статьи.

URL

Сердцевиной веб-общения является запрос, который отправляется через Единый указатель ресурсов (URL). Я уверен, что вы уже знаете, что такое URL адрес, однако для полноты картины, решил всё-таки сказать пару слов. Структура URL очень проста и состоит из следующих компонентов:

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

Методы

С помощью URL, мы определяем точное название хоста, с которым хотим общаться, однако какое действие нам нужно совершить, можно сообщить только с помощью HTTP метода. Конечно же существует несколько видов действий, которые мы можем совершить. В HTTP реализованы самые нужные, подходящие под нужды большинства приложений.

Существующие методы:

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

POST : используется для создания нового ресурса. POST запрос обычно содержит в себе всю нужную информацию для создания нового ресурса.

PUT : обновить текущий ресурс. PUT запрос содержит обновляемые данные.

DELETE : служит для удаления существующего ресурса.

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

Также HTTP поддерживает и другие методы:

HEAD : аналогичен GET. Разница в том, что при данном виде запроса не передаётся сообщение. Сервер получает только заголовки. Используется, к примеру, для того чтобы определить, был ли изменён ресурс.

TRACE : во время передачи запрос проходит через множество точек доступа и прокси серверов, каждый из которых вносит свою информацию: IP, DNS. С помощью данного метода, можно увидеть всю промежуточную информацию.

OPTIONS : используется для определения возможностей сервера, его параметров и конфигурации для конкретного ресурса.

Коды состояния

В ответ на запрос от клиента, сервер отправляет ответ, который содержит, в том числе, и код состояния. Данный код несёт в себе особый смысл для того, чтобы клиент мог отчётливей понять, как интерпретировать ответ:

1xx: Информационные сообщения

Набор этих кодов был введён в HTTP/1.1. Сервер может отправить запрос вида: Expect: 100-continue, что означает, что клиент ещё отправляет оставшуюся часть запроса. Клиенты, работающие с HTTP/1.0 игнорируют данные заголовки.

2xx: Сообщения об успехе

Если клиент получил код из серии 2xx, то запрос ушёл успешно. Самый распространённый вариант - это 200 OK. При GET запросе, сервер отправляет ответ в теле сообщения. Также существуют и другие возможные ответы:

  • 202 Accepted : запрос принят, но может не содержать ресурс в ответе. Это полезно для асинхронных запросов на стороне сервера. Сервер определяет, отправить ресурс или нет.
  • 204 No Content : в теле ответа нет сообщения.
  • 205 Reset Content : указание серверу о сбросе представления документа.
  • 206 Partial Content : ответ содержит только часть контента. В дополнительных заголовках определяется общая длина контента и другая инфа.

3xx: Перенаправление

Своеобразное сообщение клиенту о необходимости совершить ещё одно действие. Самый распространённый вариант применения: перенаправить клиент на другой адрес.

  • 301 Moved Permanently : ресурс теперь можно найти по другому URL адресу.
  • 303 See Other : ресурс временно можно найти по другому URL адресу. Заголовок Location содержит временный URL.
  • 304 Not Modified : сервер определяет, что ресурс не был изменён и клиенту нужно задействовать закэшированную версию ответа. Для проверки идентичности информации используется ETag (хэш Сущности - Enttity Tag);

4xx: Клиентские ошибки

Данный класс сообщений используется сервером, если он решил, что запрос был отправлен с ошибкой. Наиболее распространённый код: 404 Not Found. Это означает, что ресурс не найден на сервере. Другие возможные коды:

  • 400 Bad Request : вопрос был сформирован неверно.
  • 401 Unauthorized : для совершения запроса нужна аутентификация. Информация передаётся через заголовок Authorization.
  • 403 Forbidden : сервер не открыл доступ к ресурсу.
  • 405 Method Not Allowed : неверный HTTP метод был задействован для того, чтобы получить доступ к ресурсу.
  • 409 Conflict : сервер не может до конца обработать запрос, т.к. пытается изменить более новую версию ресурса. Это часто происходит при PUT запросах.

5xx: Ошибки сервера

Ряд кодов, которые используются для определения ошибки сервера при обработке запроса. Самый распространённый: 500 Internal Server Error. Другие варианты:

  • 501 Not Implemented : сервер не поддерживает запрашиваемую функциональность.
  • 503 Service Unavailable : это может случиться, если на сервере произошла ошибка или он перегружен. Обычно в этом случае, сервер не отвечает, а время, данное на ответ, истекает.

Форматы сообщений запроса/ответа

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

Давайте посмотрим на структуру передаваемого сообщения через HTTP:

Message = *() CRLF [] = Request-Line | Status-Line = Field-Name ":" Field-Value

Между заголовком и телом сообщения должна обязательно присутствовать пустая строка. Заголовков может быть несколько:

Тело ответа может содержать полную информацию или её часть, если активирована соответствующая возможность (Transfer-Encoding: chunked). HTTP/1.1 также поддерживает заголовок Transfer-Encoding.

Общие заголовки

Вот несколько видов заголовков, которые используются как в запросах, так и в ответах:

General-header = Cache-Control | Connection | Date | Pragma | Trailer | Transfer-Encoding | Upgrade | Via | Warning

Что-то мы уже рассмотрели в этой статье, что-то подробней затронем во второй части.

Заголовок via используется в запросе типа TRACE, и обновляется всеми прокси-серверами.

Заголовок Pragma используется для перечисления собственных заголовков. К примеру, Pragma: no-cache - это то же самое, что Cache-Control: no-cache. Подробнее об этом поговорим во второй части.

Заголовок Date используется для хранения даты и времени запроса/ответа.

Заголовок Upgrade используется для изменения протокола.

Transfer-Encoding предназначается для разделения ответа на несколько фрагментов с помощью Transfer-Encoding: chunked. Это нововведение версии HTTP/1.1.

Заголовки сущностей

В заголовках сущностей передаётся мета-информация контента:

Entity-header = Allow | Content-Encoding | Content-Language | Content-Length | Content-Location | Content-MD5 | Content-Range | Content-Type | Expires | Last-Modified

Все заголовки с префиксом Content- предоставляют информацию о структуре, кодировке и размере тела сообщения.

Заголовок Expires содержит время и дату истечения сущности. Значение “never expires” означает время + 1 код с текущего момента. Last-Modified содержит время и дату последнего изменения сущности.

С помощью данных заголовков, можно задать нужную для ваших задач информацию.

Формат запроса

Запрос выглядит примерно так:

Request-Line = Method SP URI SP HTTP-Version CRLF Method = "OPTIONS" | "HEAD" | "GET" | "POST" | "PUT" | "DELETE" | "TRACE"

SP - это разделитель между токенами. Версия HTTP указывается в HTTP-Version. Реальный запрос выглядит так:

GET /articles/http-basics HTTP/1.1 Host: www.articles.com Connection: keep-alive Cache-Control: no-cache Pragma: no-cache Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Список возможных заголовков запроса:

Request-header = Accept | Accept-Charset | Accept-Encoding | Accept-Language | Authorization | Expect | From | Host | If-Match | If-Modified-Since | If-None-Match | If-Range | If-Unmodified-Since | Max-Forwards | Proxy-Authorization | Range | Referer | TE | User-Agent

В заголовке Accept определяется поддерживаемые mime типы, язык, кодировку символов. Заголовки From, Host, Referer и User-Agent содержат информацию о клиенте. Префиксы If- предназначены для создания условий. Если условие не прошло, то возникнет ошибка 304 Not Modified.

Формат ответа

Формат ответа отличается только статусом и рядом заголовков. Статус выглядит так:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

  • HTTP версия
  • Код статуса
  • Сообщение статуса, понятное для человека

Обычный статус выглядит примерно так:

HTTP/1.1 200 OK

Заголовки ответа могут быть следующими:

Response-header = Accept-Ranges | Age | ETag | Location | Proxy-Authenticate | Retry-After | Server | Vary | WWW-Authenticate

  • Age время в секундах, когда сообщение было создано на сервере.
  • ETag MD5 сущности для проверки изменений и модификаций ответа.
  • Location используется для перенаправления и содержит новый URL адрес.
  • Server определяет сервер, где было сформирован ответ.

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

Инструменты для определения HTTP трафика

Существует множество инструментов для мониторинга HTTP трафика. Вот несколько из них:

Наиболее часто используемый - это Chrome Developers Tools:

Если говорить об отладчике, можно воспользоваться Fiddler :

Для отслеживания HTTP трафика вам потребуется curl, tcpdump и tshark.

Библиотеки для работы с HTTP - jQuery AJAX

Поскольку jQuery очень популярен, в нём также есть инструментарий для обработки HTTP ответов при AJAX запросах. Информацию о jQuery.ajax(settings) можете найти на официальном сайте .

Передав объект настроек (settings), а также воспользовавшись функцией обратного вызова beforeSend, мы можем задать заголовки запроса, с помощью метода setRequestHeader().

$.ajax({ url: "http://www.articles.com/latest", type: "GET", beforeSend: function (jqXHR) { jqXHR.setRequestHeader("Accepts-Language", "en-US,en"); } });

Если хотите обработать статус запроса, то это можно сделать так:

$.ajax({ statusCode: { 404: function() { alert("page not found"); } } });

Итог

Вот такой вот он, тур по основам протокола HTTP. Во второй части будет ещё больше интересных фактов и примеров.