HTTP с TCP поддерживать? - PullRequest
0 голосов
/ 18 мая 2019

Я пишу клиент HTTP / 1.1 в (asyncio) Python, и мне интересно, нужно ли создавать сокеты с опцией SO_KEEPALIVE

import socket

sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM, proto=socket.IPPROTO_TCP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

Должен ли он всегда быть включен или отключен? Существуют ли ситуации, когда это лучше включить или нет? Есть ли компромиссы, которые нужно сделать? Это другой ответ, если это HTTPS?

Я специально думаю о соединениях, которые используются для более чем одного HTTP-запроса (т.е. с использованием HTTP Keep-Alive).

1 Ответ

1 голос
/ 18 мая 2019

TCP keep-alive используется для обнаружения потери соединения для соединения TCP, которое простаивает (т.е. не передает данные) в течение более длительного периода времени.HTTP / 1 обычно не подходит для этого варианта использования, и поэтому не имеет смысла активировать поддержку активности TCP.Но это тоже не вредит.Фактически, это, вероятно, не имеет никакого значения, что отображается в сети.

В HTTP / 1 клиент отправляет запрос, за которым более или менее немедленно следует ответ от сервера.И если HTTP keep-alive активен, то может последовать другой запрос, который снова приводит к ответу.Длительность между этими запросами обычно невелика, т. Е. Обычно неактивное соединение остается открытым.Также ожидается, что клиент и сервер могут закрыть соединение в любое время после того, как запрос-ответ был выполнен, и что они также должны иметь возможность обрабатывать такое соединение близко от однорангового узла.Таким образом, вполне вероятно, что соединение либо было закрыто, либо новые данные были переданы до того, как таймер поддержания активности TCP мог инициировать доставку пустого пакета проверки активности.

...