HTTP/0.9, HTTP/1.0, HTTP/1.1
Здесь мы обсуждаем версии HTTP/0.9, HTTP/1.0, HTTP/1.1, а также затрагиваем вопросы HTTP/2. В HTTP/0.9 все запросы были однострочными, например, такими; ``` GET /index.html ``` В HTTP/1.0 появились заголовки запроса и ответа, в частности, заголовок `Content-Type`. Упоминается сайт [Хабр](https://habr.com/ru/feed/). HTTP/1.1 поддерживает повторное использование соединения, то есть соединение не обрубается после выполнения первого HTTP-запроса: ``` nc google.com 80 HEAD / HTTP/1.1 ``` В то же соединение можно после первого запроса отправить второй запрос: ``` HEAD /wowwow HTTP/1.1 ``` Для выхода жмём `CTRL`+`C`. Также в HTTP/1.1 появился обязательный заголовок `HOST`: ``` nc app.salesbeat.pro 80 HEAD / HTTP/1.1 # ответ статусом 400, тк запрос без заголовка HOST HEAD / HTTP/1.1 HOST: app.salesbeat.pro # ответ статусом 301 на https://app.salesbeat.pro, запрос уже корректный HEAD / HTTP/1.1 HOST: course.to.digital # ответ статусом 301 на https://course.to.digital # хотя домен, «к которому подключались» был app.salesbeat.pro. # Подключение идёт по IP сервера, домен здесь только для выяснения IP ```
Проблемы HTTP 1.1
Для получения страницы браузеру необходимо отправить большое количество запросов. Отправка каждого запроса занимает определенное время. Для ускорения получения данных браузер может использовать до 6 соединений, чтобы получать данные параллельно. Но это решение не является оптимальным. Так же для сокращения количества запросов некоторые данные, к примеру картинки, могут передаваться в одном запросе. Сохраняется проблема большого количества одинаковых заголовков в запросах.
HTTP 2
Данные передаются в бинарном формате. Реализовано сжатие HTTP заголовков. Контент бьется на части и передается одним потоком. Браузер может установить приоритет для некоторых данных, чтобы сервер отдавал их в первую очередь.
HTTP 3
Работает поверх UDP, использую протокол QUIC