HTTP - HyperText Transfer Protocol, как следует из названия - протокол ответственен за передачу гипертекста. Протокол HTTP впервые был представлен в 1991 году. Был представлен HTTP/0.9. На его примере я хочу показать самый базовый пример логики работы HTTP: Протокол HTTP предполагает заведомое наличие двух сторон: клиента и сервера. Клиент запрашивал файл гипертекста (в версии 0.9 еще не было поддержки других форматов информации): (Request) GET /iwantthispage.html Сервер отвечает: (Response in hypertext) This is the best page, I've ever seen Все максимально просто. Пользователь попросил - сервер отправил. Но этого функционала не было достаточно, т.к. у разных пользователей были различные операционные системы, разные разрешения экранов и другие особенности, которые не позволяли использовать одну версию сайта для всех устройств на рынке. Также, скорость Интернета росла, а значит кроме гипертекста можно было передавать различные файлы, такие как фото, видео и любые другие виды информации. Поэтому, через 5 лет, в 1996 году был выпущен протокол HTTP/1.0. Чуть позже, в 1999 году был принят самый распространенный на сегодняшний день протокол HTTP/1.1. В версии HTTP/1.0 был добавлен заголовок - HTTP Header. В заголовке содержится информация о версии браузера (user-agent), язык, Do Not Track (#whatis_donottrack), тип соединения (с версии HTTP/1.1) и другая информация. Список (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) заголовков. Пример взаимодействия протокола HTTP/1.1: Клиент отправляет запрос, чтобы получить страницу main.html в под-домене сайта www.site.com > GET /subfolder/main.html HTTP/1.1 > host: www.site.com > accept: image/gif, image/jpeg > accept-Language: en-us > accept-Encoding: gzip, deflate > DNT: 1 > user-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0 Сервер посылает ответ: > HTTP/1.1 200 OK > date: Sun, 6 Sep 2020 08:56:53 GMT > server: Apache/2.2.14 (Win32) > ETag: "3f80f-1b6-3e1cb03b" > accept-Ranges: bytes > content-language: en-US > connection: close > content-Type: text/html > > This is the best page, I've ever seen > В данном примере на сервер передалась информация: * Версия HTTP: HTTP/1.1 * Местоположение требуемого файла: /subfolder/main.html * Хост: www.site.com * Какие допустимые форматы запрашивает устройство у сервера, кроме гипертекста: gif, jpeg * Язык, который запросил пользователь: en_us * Шифрование, которые может расшифровать устройство: gzip, deflate * Do Not Track: 1 * Версия браузера: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0 Сервер отвечает: * HTTP/1.1: Версия HTTP: HTTP/1.1 * 200 OK: Код состояния HTTP: 200 OK, успешный запрос. Список всех кодов (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes). * date: Время отправки ответа: 6 сен. 2020 08:56:53 GMT * server: Техническая информация о сервере: Apache/2.2.14 (Win32) * ETag: Уникальный код для текущей версии файла на сервере: 3f80f-1b6-3e1cb03b * accept-Ranges: Возможность получения только части сообщения HTTP с сервера клиенту: да, отсчет в: bytes * content-language: Язык отправляемого контента: en_us * connection: Продолжается ли соединение с сервером после передачи: close * content-Type: Тип переданного файла: text/html * ... : Код сайта Так, на базовом уровне, для одного передаваемого файла, работает протокол HTTP/1.1. По аналогии, для большого количества файлов можно создавать большое количество запросов. Во время передачи данных - файлы, передающиеся по HTTP не шифруются вовсе. Для шифрования используется протокол HTTPS, который не является отдельной версией HTTP. HTTPS - "надстройка" над HTTP. Так же, существуют версии HTTP/2.0 (2015) и HTTP/3.0 (2018), в которых была проведена оптимизация и очистка от некоторых функций, которые несли потенциальную угрозу безопасности, но самой распространенной в использовании все еще является версия HTTP/1.1. Спасибо за внимание.