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