Постоянное соединение в HTTP | Курс 'Компьютерные сети'

preview_player
Показать описание

Постоянное соединение HTTP (HTTP keep-alive, HTTP persistent connection) - использование одного TCP-соединения для загрузки нескольких ресурсов

Преимущества постоянного соединения:
- Сокращение накладных расходов на установку TCP-соединения.
- Нет необходимости каждый раз начинать передачу данных с маленьким размером окна TCP (медленный старт).

В стандарте HTTP 1.0 возможности использовать постоянное соединение нет. После публикации стандарта HTTP 1.0 был предложен заголовок "Connection: keep-alive".

Пример использования заголовка "Connection: keep-alive":
HTTP-запрос:
GET /courses/networks HTTP/1.0
Connection: keep-alive

HTTP-ответ:
HTTP/1.0 200 OK
Server: nginx
Content-Type: text/html; charset=UTF-8
Content-Length: 5161
Connection: keep-alive

В стандарте HTTP 1.1 по умолчанию все соединения постоянные.

Технология конвейерной обработки HTTP (pipelining) - отправка сразу нескольких HTTP запросов через постоянное соединение не дожидаясь ответа. Сервер также передает сразу несколько запрошенных ресурсов.

Для ускорения загрузки Web-страниц браузеры открывают сразу несколько соединений с Web-сервером. Каждое такое соединение может быть постоянным и использовать конвейерную обработку.

Мой канал с краткими и понятными объяснениями сложных тем в ИТ и компьютерных науках:
Рекомендации по теме
Комментарии
Автор

Обалдеть. Такой курс бесплатный. Огромное вам спасибо.

Agata
Автор

Это лучший образовательный канал! Спасибо вам за труд!

kreemen
Автор

Спасибо.
Qilgan bu yaxshi amallariyezni ajrini bersin.

Q_School
Автор

Spasibo Balshoe
vso ochen krasivo i poyatlivo

atillaattila
Автор

07:57 - не совсем понял: несколько HTTP соединений или TCP соединений?
Если это не опечатка, то эти http соединения находятся в пределах одного tcp соединения, или каждое http соединение находится внутри своего tcp соединения?

Азамат-шз
Автор

Андрей, подскажите пожалуйста, не удается установить соединение через PuTTY. Нужно выбирать RAW, Telnet? У меня ошибка "Connection closed by remote host", либо "400 Bad Request". А может быть просто в 2016 году вы не использовали HTTPS, а теперь используете и больше такой вариант общения с сервером не работает?

PavlentijIvani
Автор

7:59 разве в HTTP/1 максимальное число одновременных соединений с одним источником не ограничено двумя?

ILyaCyclone
Автор

Подскажите пожалуйста, как разобраться с протоком WebSocket? Как-то мало информации системной об этом, показалось. Спасибо

ivanstrelka
Автор

Интересно как работает keep-alive в современном мире Single Page Applications.
По сути сервер отдает практически пустую html-страницу пользователю при первоначальном заходе на сайт. Потом подгружается js-бандл, который тянет с сервера json-ы с данными и рендерит их в симпатичном лэйауте.
И в процессе взаимодействия пользователя с сайтом просто гуляют туда-сюда json-ы, без перезагрузки страницы.
Имеет ли смысл серверу SPA держать соединение 5-15 секунд, или выгоднее при каждом XmlHttpRequest открывать новое TCP-соединение?

isfland
Автор

08:09 Имелось ввиду несколько TCP соединений через которые пойдут запросы HTTP? Или же все-таки в старой версии HTTP не использовалось TCP и все отправлялось в запросах, что делает метод нескольких HTTP соединений немного улучшеной старой технологией?

ЕгорМиронов-щп
Автор

5:50 А за зачем close писать если есть флаг fin? Просто в дальнейшем этот флаг нельзя отправить и закрыть соединение? Или после close соединение со стороны клиента считается закрытым? Как вообще происходит дело после connection: close ?

wtcherj
Автор

Строго говоря, в 1.0 есть возможность юзать keep-alive через расширение протокола :).

dzen
Автор

Не совсем понятна одна деталь. Когда браузер открывает несколько HTTP соединений, он в каждом соединении должен установить TCP соединение, или что-то не так я понимаю? Если не сложно ответьте подробнее.

anything
Автор

Вы говорите, что сначала идет запрос на сервер для получения HTML документа, а после его загрузки происходит его анализ с целью поиска других связанных ресурсов для загрузки. То есть сначала загружаем документ, потом файлы стилей, картинки и скрипты. С файлами стилей и картинками все понятно, они действительно подгружаются после загрузки документа, чем создают некоторые проблемы для разработчиков среди которых перемещение контента из за поздно загрузившейся картинки, мигание шрифтов и прочее. Но файлы скриптов (JS) они ведь выполняются по мере загрузки страницы, то есть синхронно и основной поток будет ждать их загрузки. То есть они в отличии от остальных файлов по умолчанию синхронны и только используя специальные атрибуты можно задать иное поведение.

Первый вопрос: интересно, а почему так?
Второй вопрос: а как вообще так то?)) Браузер что, тормозит весь поток и даже текущую загрузку целевого документа, но отдает запрос на загрузку скрипта и его выполнения и только потом он все возобновляет? Что за важность такая у скриптов?

Спасибо))

DanL
Автор

на примере python
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('127.0.0.1', 8888))
sock.listen(5)

while True:
try:
client, addr = sock.accept()
except KeyboardInterrupt:
sock.close()
break
else:
result = client.recv(1024)
client.close() # если бы мы тут не закрыли соединение с клиентом, то получилось бы,
# якобы тут от http приходит, connection: keep alive заголовок и соединение постоянно слушается ?
print("MSG:", result.decode('utf-8'))

т.е когда клиент устанавливает TCP соединение с сервером, сервер не закрывает соединение с клиентом после получения сегмента и постоянно ждет новых?

nazimtairov
Автор

Здравствуйте, спасибо за урок! А сервер HTTP 1.1 может сам отказаться от поддержки постоянного соединения?

sergeyufimtsev