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

Протокол 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 (HyperText Transfer Protocol - «протокол передачи гипертекста») - протокол прикладного уровня передачи данных (изначально - в виде гипертекстовых документов). Основой HTTP является технология «клиент-сервер», то есть предполагается существование потребителей (клиентов), которые инициируют соединение и посылают запрос, и поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.

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

Основным объектом манипуляции в HTTP является ресурс, на который указывает URI (Uniform Resource Identifier) в запросе клиента. Обычно такими ресурсами являются хранящиеся на сервере файлы, но ими могут быть логические объекты или что-то абстрактное. Особенностью протокола HTTP является возможность указать в запросе и ответе способ представления одного и того же ресурса по различным параметрам: формату, кодировке, языку и т. д. Именно благодаря возможности указания способа кодирования сообщения клиент и сервер могут обмениваться двоичными данными, хотя данный протокол является текстовым.

HTTP - протокол прикладного уровня, аналогичными ему являются FTP и SMTP - простой протокол передачи почты . Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI . В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами. Браузер, посылающий запросы, может отслеживать задержки ответов. Сервер может хранить IP-адреса и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования.

    Расширяемость

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

    HTTP/1.1 - текущая версия протокола. Новым в этой версии был режим «постоянного соединения»: TCP-соединение может оставаться открытым после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Клиент теперь обязан посылать информацию об имени хоста, к которому он обращается, что сделало возможным более простую организацию виртуального хостинга.

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

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

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

Каждый сервер обязан поддерживать как минимум методы GET и HEAD. Если сервер не распознал указанный клиентом метод, то он должен вернуть статус 501 (Not Implemented). Если серверу метод известен, но он не применим к конкретному ресурсу, то возвращается сообщение с кодом 405 (Method Not Allowed). В обоих случаях серверу следует включить в сообщение ответа заголовок Allow со списком поддерживаемых методов.

Кроме методов GET и HEAD, часто применяется метод POST.

  • Заголовки (параметры) HTTP запроса, ответа, сущности

    Все заголовки в протоколе HTTP разделяются на четыре основных группы (в нижеприведенном порядке рекомендуется посылать заголовки получателю):

      General Headers (Основные заголовки) - должны включаться в любое сообщение клиента и сервера.

      Request Headers (Заголовки запроса) - используются только в запросах клиента.

      Response Headers (Заголовки ответа) - только для ответов от сервера.

      Entity Headers (Заголовки сущности) - сопровождают каждую сущность сообщения. В отдельный класс заголовки сущности выделены для того, чтобы не путать их с заголовками запроса или заголовками ответа при передаче множественного содержимого (MIME).

    Все необходимые для функционирования HTTP заголовки описаны в основных RFC . При необходимости можно создавать свои заголовки. Традиционно к именам таких дополнительных заголовков добавляют префикс "X-" для избежания конфликта имён с возможно существующими.

    Строки после главной строки запроса (GET /index.html HTTP/1.1) имеют следующий формат: Параметр: значение. Таким образом задаются параметры запроса. Это является необязательным, все строки после главной строки запроса могут отсутствовать; в этом случае сервер принимает их значение по умолчанию или по результатам предыдущего запроса (при работе в режиме Connection: Keep-Alive).

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

      Параметр User-Agent - значением является "кодовое обозначение" браузера.

      Параметр Accept - список поддерживаемых браузером типов содержимого в порядке их предпочтения данным браузером.

      Параметр Host - имя домена, с которого запрашивается ресурс. Полезно, если на сервере имеется несколько виртуальных серверов под одним IP- адресом. В этом случае имя виртуального домена определяется по этому полю.

      Параметр Last-Modified (модифицирован в последний раз) (W3C Last-Modified) - дата и время последнего изменения документа. Используя его, клиент, подобно случаю с ETag, может обращаться к серверу с запросом "If-Modified-Since" - в этом случае сервер должен сравнить дату последней модификации копии, сохраненной на клиенте, с актуальной датой последней модификации. Если они совпадут, это значит, что копия в кэше клиента не устарела, и повторное скачивание не нужно (код ответа "304 Not Modified"). Last-Modified также необходим для корректной обработки сайта роботами, которые используют информацию о дате модификации страниц в целях сортировки результатов поиска по дате, а также для определения частоты обновляемости Вашего сайта.

    Для SSI документов Apache будет выдавать "Last-Modified" в том случае, если указана директива "XBitHack full" (например, в файле.htaccess)

      Параметр ETag (объектная метка) - появился в HTTP 1.1(W3C ETag). ETag служит для присвоения каждой странице уникального идентификатора, значение которого меняется при изменении страницы (документа). ETag представляет собой хеш («отпечаток») байтов документа, если в документе изменится хоть один байт, то изменится и ETag. ETag используется при кэшировании документа. Этот заголовок сохраняется на клиенте, и в случае повторного обращения к документу позволяет браузеру обратиться к серверу с запросом ‘If-None-Match’, а сервер должен по значению ETag- метки определить, не изменился ли документ(страница), и если нет, ответить кодом ‘304 Not Modified’.

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

    Другие заголовки HTTP:

      HTTP_X_FORWARDED_FOR

      HTTP_X_FORWARDED

      HTTP_FORWARDED_FOR

    • HTTP_X_COMING_FROM

      HTTP_COMING_FROM

    • HTTP_X_CLUSTER_CLIENT_IP

    • HTTP_XROXY_CONNECTION

      HTTP_PROXY_CONNECTION

      HTTP_USERAGENT_VIA - прокси

    Пример анализа HTTP запроса

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

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

    Клиент инициирует транзакцию следующим образом:

      Клиент устанавливает связь с сервером по назначенному номеру порта, официальный номер порта по умолчанию - 80. Затем клиент посылает запрос документа, указав метод, адрес документа и номер версии HTTP. Например, в главной строке запроса GET /index.html HTTP/1.1

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

      Клиент посылает информацию заголовка (необязательную, заголовок host обязателен), чтобы сообщить серверу информацию о своей конфигурации и данные о форматах документов, которые он может принимать. Вся информация заголовка указывается построчно, при этом в каждой строке приводится имя и значение. Например, приведённый ниже заголовок, посланный клиентом, содержит его имя и номер версии, а также информацию о некоторых предпочтительных для клиента типах документов: Host: list.mail.ru User-Agent: Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

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

      Послав запрос и заголовки, клиент может отправить и дополнительные данные, например, для CGI скриптов.

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

      Первая часть ответа сервера - строка состояния, содержащая три поля: версию HTTP, код состояния и описание. Поле версии содержит номер версии HTTP, которой данный сервер пользуется для передачи ответа. Код состояния - это трехразрядное число, обозначающее результат обработки сервером запроса клиента. Описание, следующее за кодом состояния, представляет собой просто понятный для человека текст, поясняющий код состояния. Например, строка состояния HTTP/1.1 304 Not Modified

      говорит о том, что сервер для ответа использует версию HTTP 1.1. Код состояния 304 означает, что клиент запросил документ методом GET, использовал заголовок If-Modified-Since или If-None-Match и документ не изменился с указанного момента.

      После строки состояния сервер передает клиенту информацию заголовка, содержащую данные о самом сервере и затребованном документе. Ниже приведен пример заголовка: Date: Thu, 15 Dec 2011 09:34:15 GMT Server: Apache/2.2.21 (Debian) X-Powered-By: PHP/5.3.8-1+b1 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=utf-8

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

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

    HTTP status code

    Код состояния HTTP (HTTP status code) является частью первой строки ответа сервера. Он представляет собой целое число из трех цифр. Первая цифра указывает на класс состояния. За кодом ответа обычно следует отделённая пробелом поясняющая фраза на английском языке, которая разъясняет человеку причину именно такого ответа.

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

      1xx : Informational (Информационные). Информационные коды состояния, сообщающие клиенту, что сервер пребывает в процессе обработки запроса. Реакция клиента на данные коды не требуется;

      2xx : Success (Успешно).

      1. 200 OK (Хорошо). Появился в HTTP/1.0. Успешный запрос ресурса. Если клиентом были запрошены какие-либо данные, то они находятся в заголовке и/или теле сообщения.

      3xx : Redirection (Перенаправление(переадресация)). Коды класса 3xx сообщают клиенту, что для успешного выполнения операции необходимо сделать другой запрос (как правило по другому URI). Из данного класса пять кодов 301, 302, 303, 305 и 307 относятся непосредственно к перенаправлениям (редирект). Адрес, по которому клиенту следует произвести запрос, сервер указывает в заголовке Location. Многие клиенты при перенаправлениях с кодами 301 и 302 ошибочно применяют метод GET ко второму ресурсу несмотря на то, что к первому запрос был с иным методом. Чтобы избежать недоразумений в версии HTTP/1.1 были введены коды 303 и 307 вместо 302. Изменять метод запроса нужно только если сервер ответил 303. В остальных случаях следующий запрос производить с исходным методом.

      1. 302 Found (Найдено). Введено в HTTP/1.0. Запрошенный документ временно доступен по другому URI , указанному в заголовке в поле Location.

      4xx : Client Error (Ошибка клиента). Класс кодов 4xx предназначен для указания ошибок со стороны клиента. При использовании всех методов, кроме HEAD , сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя.

      1. 404 Not Found (Не найдено). Появился в HTTP/1.0. Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URI .

      5xx : Server Error (Ошибка сервера)

    Ссылки по теме HTTP 1.1

    HTTP/2

    HTTP/2 (изначально HTTP/2.0) - вторая крупная версия сетевого протокола HTTP. Протокол основан на SPDY (HTTP-совместимый протокол, разработанный Google).

    Протокол HTTP/2 является бинарным. По сравнению с предыдущим стандартом изменены способы разбития данных на фрагменты и транспортирования их между сервером и клиентом.

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

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

Сущность работы HTTP

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

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

Теперь раскроем суть понятия HTTP протокол

HTTP (англ. HyperText Transfer Protocol) – процесс, согласно которому проводятся все виды обмена информацией в всемирной сети Интернет.

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

Синхронизированный протокол

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

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

Как осуществляется запрос?

Процесс отправки запроса на сервер можно разбить на несколько составных частей:

  1. В первую очередь осуществляется DNS-запрос, который должен преобразовать адрес сайта из URI формата в IP (числовая форма URI-адреса). Именно такой формат адреса используется в Всемирной сети.
  2. После определения IP устанавливается связь между сервером и HTTP клиентом.
  3. Пересылка запроса.
  4. Задержка, в которую входит пересылка информации на сервер, ее обработка и отправка ответа на запрос. Программисты называют этот временной промежуток ожиданием ответа.
  5. Получение ответа на запрос.

Отследить все эти этапы можно с помощью панели веб-разработчика в браузере.

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

Заметка

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

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

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

Параллельное HTTP соединение

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

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

Конвейерное HTTP соединение

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

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

Подводя итог

На сегодняшний день спецификация HTTP 1.1 является морально устаревшей сводкой правил. Над ее модернизацией ведутся работы уже достаточно давно, ярким примером этого являются HTTP-NG и SPDY . Развивать HTTP можно и силами усовершенствования языка программирования сайтов HTML5 . Все эти процессы позволят ускорить работу протокола, однако правило минимизации обращения к серверу, что позволит увеличить скорость работы ресурса, будет всегда актуальным.

Цель лекции: сформировать представление о функционировании протокола HTTP/HTTPS.

HTTP (HyperText Transfer Protocol) – один из наиболее важных протоколов, который обеспечивает передачу данных через интернет. Протокол HTTP находится на седьмом, прикладном уровне модели OSI и работает на основе протокола TCP.

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

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

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


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

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


HTTP-запрос формируется на клиенте и отправляется на сервер с целью получения информации от него. В нем содержится информация о ресурсе, который необходимо загрузить, а также дополнительные сведения. Первая строка содержит метод запроса (который мы рассмотрим далее в этой лекции), имя ресурса (с указанием относительного пути на сервере), а также версию протокола. Например, вид приветственной строки может быть определен как "GET /images/corner1.png HTTP/1.1 ". Такой запрос обращается к серверу с требованием выдать методом GET изображение, расположенное в папке "images " и имеющее название "corner1.png ". HTTP-заголовки имеют важное значение для HTTP-запроса, поскольку в них указывается уточняющая информация о запросе – версия браузера, возможности клиента принимать сжатое содержимое, возможности кэширования и другие важные параметры, которые могут влиять на формирование ответа. В теле HTTP-запроса обычно содержится информация, которую необходимо передать на сервер. Например, если требуется загрузить файл на сервер, то содержимое файла будет находится в теле HTTP-запроса. Однако, размещение данных в теле HTTP-запроса допускается не для всех HTTP-методов. Например, тело HTTP-запроса всегда пустое, если используется метод GET . Таким образом, стандартный HTTP-запрос может выглядеть следующим образом.


В приведенном HTTP-запросе клиент обращается к серверу "microsoft.com ", запрашивает ресурс "images/corner.png " и указывает, что он способен принимать сжатое содержимое по алгоритму "gzip " или "deflate ", его языком является английский язык и указывает версию своего браузера. Как было отмечено ранее, количество и набор заголовков может существенно отличаться. Можно привести другой пример HTTP-запроса.


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

HTTP-ответ генерируется веб-сервером в ответ на поступивший HTTP-запрос. По своей структуре он схож с HTTP-запросом, но имеет определенные отличия. Главное отличие содержится в первой строке. Вместо имени запрашиваемого ресурса и метода запроса в ней указывается статус ответа. Статус указывает на то, насколько успешно выполнился HTTP-запрос. Например, в случае, если документ найден на сервере и может быть выдан клиенту, то статус имеет значение "ОК ", которое говорит о том, что запрос выполнился успешно. Однако, могут появляться исключительные ситуации – например, документ отсутствует на сервере или у пользователя отсутствуют права на получение ресурса. Набор всевозможных статусных сообщений HTTP-ответа мы рассмотрим далее в этой лекции. Таким образом, первая строка HTTP-ответа может принимать значение "HTTP/1.1 200 OK ". HTTP-заголовки в HTTP-ответе также являются важным элементом. Они характеризуют содержимое, которое передается клиенту. Например, в этих HTTP-заголовках может содержаться информация о типе содержимого (HTML-документ, изображение и т.д.), длине содержимого (размер в байтах), дате модификации, режиме кэширования и др. Все эти заголовки влияют на способ отображения данных на клиенте, а также устанавливают правила хранения данных в клиентском кэше. Типичный вид HTTP-ответа может быть следующим.


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

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

Наиболее распространенными методами HTTP-запроса являются следующие типы методов:

GET позволяет получить информацию от сервера, тело запроса всегда остается пустым;
HEAD аналогичен GET , но тело ответа остается всегда пустым, позволяет проверить доступность запрашиваемого ресурса и прочитать HTTP-заголовки ответа;
POST позволяет загрузить информацию на сервер, по смыслу изменяет ресурс на сервере, но зачастую используется и для создания ресурса на сервере, тело запроса содержит изменяемый/создаваемый ресурс;
PUT аналогичен POST , но по смыслу занимается созданием ресурса, а не его изменением, тело запроса содержит создаваемый ресурс;
DELETE удаляет ресурс с сервера.

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

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

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

Код Описание
1xx Информационные коды
2xx Успешное выполнение запроса
200 Запрос был обработан успешно
201 Объект создан
202 Информация принята
203 Информация, которая не заслуживает доверия
204 Нет содержимого
205 Сбросить содержимое
206 Частичное содержимое (например, при "докачке" файлов)
3xx Перенаправление (чтобы выполнить запрос, нужны какие-либо действия)
300 Несколько вариантов на выбор
301 Ресурс перемещен на постоянной основе
302 Ресурс перемещен временно
303 Смотрите другой ресурс
304 Содержимое не изменилось
305 Используйте прокси-сервер
4xx Проблема связана не с сервером, а с запросом
400 Некорректный запрос
401 Нет разрешения на просмотр ресурса
402 Требуется оплата
403 Доступ запрещен
404 Ресурс не найден
405 Недопустимый метод
406 Неприемлемый запрос
407 Необходима регистрация на прокси-сервере
408 Время обработки запроса истекло
409 Конфликт
410 Ресурса больше нет
411 Необходимо указать длину
412 Не выполнено предварительное условие
413 Запрашиваемый элемент слишком велик
414 Идентификатор ресурса (URI ) слишком длинный
415 Неподдерживаемый тип ресурса
5xx Ошибки на сервере
500 Внутренняя ошибка сервера
501 Функция не реализована
502 Дефект шлюза
503 Служба недоступна
504 Время прохождения через шлюз истекло
505 Неподдерживаемая версия HTTP

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

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

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

По этой причине существует модификация этого протокола – HTTPS , т.е. протокол HTTP с поддержкой шифрования.

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


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

Краткие итоги

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