19

Так что я знаю, что HTTP - это просто текстовый протокол поверх TCP, и что TCP основан на состоянии / соединении. Это означает, что браузер должен подключиться через TCP к серверу перед выполнением HTTP-запроса. Тогда возникает вопрос: создают ли браузеры новое TCP-соединение для каждого HTTP-запроса?

Браузеры могут просто открыть запрос TCP и сохранить его, пока пользователь все еще просматривает данные на этом сервере, но тогда серверам придется использовать большое количество максимальных соединений для обработки этого. Но с другой стороны, если браузеры создают соединение для каждого запроса и пользователь много просматривает на одном и том же сервере, это может показаться пустой тратой. Как это обычно работает? Может быть, с помощью таймера?

2 ответа2

26

В HTTP/0.9 (больше не используется) каждый запрос использует отдельное TCP-соединение, и конец ответа сигнализируется закрытием соединения.

В HTTP/1.0 неофициальный, но очень широко поддерживаемый заголовок запроса « Connection: Keep-Alive » может использоваться для запроса постоянного соединения, если сервер поддерживает его.

В HTTP/1.1 постоянные соединения используются по умолчанию, и старое поведение с одним запросом должно запрашиваться явно.

При желании запросы могут быть конвейерными, хотя это все же имеет некоторые недостатки, поэтому часто используются множественные (2–5) соединения.

HTTP/2 (он же SPDY) был специально разработан для мультиплексирования множества запросов одновременно.

Ресурсы: статья в Википедии и RFC 2616 раздел 8.1.

5

Существует заголовок «Connection: Keep-Alive». Смотрите enwiki для деталей.

Вы можете использовать Wireshark для захвата и анализа соединений и просмотра всех заголовков.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .