8. HTTP.md 3.1 KB

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.

Упоминается сайт Хабр.

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