Браузеры создают новые соединения TCP для каждого HTTP-запроса?

23

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

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

Xeon06
источник

Ответы:

30

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

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

В HTTP / 1.1 постоянные соединения стали значениями по умолчанию , и старое поведение с одним запросом должно запрашиваться явно. Обычно используется несколько (2–5) постоянных соединений.

(При желании запросы могут быть конвейерными , хотя это оказалось трудным для реализации и создает больше проблем, чем решает (блокировка заголовка строки и т. Д.), Поэтому никто не использует конвейеризацию HTTP / 1.x.)

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

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

grawity
источник
Еще одна интересная статья, в которой упоминается тот же developer.mozilla.org/en-US/docs/Web/HTTP/…
Ганеш Сатпут
6

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

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

Vi.
источник
Почему Wireshark вместо Fiddler?
Pacerier
3
Fiddler - 1. Не программное обеспечение с открытым исходным кодом; 2. Только для Windows.
Ви.