HTTP. База
Введение в протокол HTTP. База на чем строиться web
Это ознакомительная статья, которая дает понимание процессов, но не полную информацию. О многих вещах будет рассказано отдельно
Базовые понятия
HTTP - Протокол для обмена данными в интернете.
client и server обмениваются отдельными сообщениями. Клиент отправляет запросы request, а сервер возвращает ответ response.
Принцип request < - > response, в две стороны.
Процесс может быть server для нас, но для других сайтов это может быть client.
HTTP является расширяемым протоколом
Запросы отправляются клиентом, клиентом может быть что угодно браузер, консольная утилита, поисковый робот.
Между клиентом и сервером могут быть посредники proxy, которые могут как то модифицировать и фильтровать запрос.
Чтобы клиенту сделать запрос ему нужно знать ip адрес сервера, куда нужно отправлять запрос (про dns пока опустим).
После этого создается виртуальный канал связи. Помимо ip адреса внутри одного сервера есть система виртуальных портов от 1 ... 65535. Любой из портов может забронировать только один процесс. Процесс может занимать несколько портов, но один порт = один процесс.
Например, к сайту google.com, можно обратится так http://google.com:80 и так https://google.com:443 попадаем на один и тот же сайт.
Эти порты зарезервированы.
На клиентском компьютере тоже есть порты, но тут ничего не зарезервировано, выдаются порты с номерами больше 1000 обычно от 49152 до 65535 к примеру Клиент - 192.168.1.100:51234 сервер - 93.184.216.34:80.
Чтобы это увидеть в linux системах выполним команду:
1
2
3
4
netstat -an | grep ESTABLISHED
tcp 0 0 192.168.88.252:59038 5.255.255.77:443 ESTABLISHED
tcp 0 0 192.168.88.252:54816 34.36.137.203:443 ESTABLISHED
tcp 0 0 192.168.88.252:54828 34.120.208.123:443
Видно, какие парты выдал клиент и какие порты на сервере.
HTTP протокол не имеет состояние, но может сохранять пользовательскую сессию используя “Куки”.
Клиент
Клиент - это устройство инициализирующее запрос, например браузер. Чтобы получить ответ, браузер выполняет запрос на сервер. Помимо html браузер так же запрашивает скрипты, стили, изображения, видео. Далее все это склеиваться в один документ и показывается пользователю.
Сервер
Сервер - это виртуальная машина (может быть несколько машин) которая обслуживает запросы клиентов. Несколько серверов могут быть расположены на одной машине.
Прокси - это промежуточный узел, который может кешировать, фильтровать, протоколировать, аутентифицировать запрос клиента, прежде чем он попадет на сервер.
По умолчанию для сервера используется порт 80 или 443, но можно настроить любой другой.
Запрос-ответ
Теперь посмотрим как происходит запрос-ответ:
- Открывается
tcpсоединение, которое будет использоваться для цикла запрос-ответ. Может быть открыто несколько соединений - Отправка
httpсообщения на сервер, например
1
2
GET / HTTP/1.1
Host: test.test.com
- Сервер анализирует запрос и возвращает результат
1
2
3
4
HTTP/1.1 200 OK
Server: Apache
<!doctype html>… (here come the 29769 bytes of the requested web page)
- Закрытие или переиспользование соединения.
Версии http протокола. Краткий экскурс
В ранних версиях протокола HTTP/0.9 поддерживалась только передача гипертекста. Протокол был максимально простым. Но уже очень скоро перестал удовлетворять потребностям пользователей. В 1995 году когда появился HTTP/1.0 проблемы были частично решены
Но вскоре появились новые проблемы. Простота HTTP/1.0 один запрос - один ответ, показывал низкую эффективность. Тогда разработчики начали думать, и в 1999 году вышел HTTP/1.1 - основа веба и сейчас.
Что было решено к этому моменту:
- убраны избыточные
tcpсоединения. - повышена скорость передачи данных.
- появилась возможность кешировать запросы.
- …
Это был большой шаг в развитие веб технологий, но со временем все усложнялось и включало в себя все больше возможностей.
Возникла потребность в новых протоколах.
В 2015 году был представлен HTTP/2 бинарный протокол передачи данных.
Основные возможности HTTP/2:
- исполнение параллельных запросов через одно соединение
- сжатие заголовков
- безопасность данных
- установка приоритетов загрузки ресурсов
- ускорение загрузки страниц
- …
Следующим шагом развития стал HTTP/3 - это улучшенная версия предыдущих стандартов, которая со временем заменит их благодаря еще более высокой скорости и надежности.
Поскольку HTTP/2 использует TCP, это накладывает определенные ограничения на быстроту передачи данных. HTTP/3 основан на транспортном протоколе QUIC.
В 2024 году HTTP/3 поддерживают уже многие браузеры, посмотрим что будет дальше.
Запрос
Можно было увидеть из примеров выше запросы имеют специальный формат GET / HTTP/1.1, где
- Метод запроса, например
GETполучение ресурса,POSTотправка формы, и другие - Путь к ресурсу, могут быть указаны дополнительные параметры после
?, например/test.html?query=123 - Версия протокола, чтобы дать понять серверу какую версию использовать для ответа
- Заголовки запроса, их может быть несколько, в них может быть информация о типах данных, язык или иные директивы меняющие поведение сервера. Различных заголовков очень много.
- Блок с пустой строкой
- Тело запроса, оно бывает не у всех типов запросов.
1
2
3
GET / HTTP/1.1
Host: test.test.com
Ответ
Ответ приходит в следующем формате HTTP/1.1 200 OK, где указывается
- Версия протокола
- Код ответа(состояния) сервера
- Сообщение кода ответа(состояния) сервера
- Заголовки ответа, среди них указываются тип, размер, алгоритм сжатия и др.
- Блок с пустой строкой
- Тело ответа, оно может быть не у всех типов ответов.
1
2
3
4
HTTP/1.1 200 OK
Server: Apache
<!doctype html>… (here come the 29769 bytes of the requested web page)
В отличие от HTTP/1.1 - HTTP/2 делит сообщения на фреймы, что позволяет сжимать заголовки отдельно от данных. Несколько потоков данных можно объединять друг с другом, это называется мультиплексированием.
Оптимизация бизнеса, создание сайтов, разработка парсеров или интеграций.
Бесплатно расчитаю время разработки, предложу решение вашей задачи.
