Я никогда не задумывался об этом, но теперь меня интересуют несколько основных вещей за кулисами. 1) Закрывает ли веб-сервер соединение после каждого запроса? 2) Когда у меня открыто больше окон браузера и все данные запроса с какого-то веб-сервера, использует ли веб-сервер какой-то стандартный обмен данными через сокеты, чтобы распознать, какое соединение что запрашивало? 3) Что делать, если пользователей больше, чем свободных портов (скажем, 66k что-то запрашивают одновременно)
Спасибо :)
1) Обычно каждый запрос страницы ограничивается одним открытым и закрытым соединением.
2) Ваш компьютер меняет исходный порт для каждого запроса. Сервер использует комбинацию IP / порта источника, чтобы отслеживать, какие запросы пришли с каких хостов.
3) Сервер отвечает на все HTTP-запросы через порт 80. Но что касается клиентов, если вы можете сгенерировать 66K запросов от одного клиента одновременно, у вас могут возникнуть проблемы, я не уверен в этом.
1) Keepalive поддерживается большинством современных веб-серверов, поэтому, если браузер поддерживает его, веб-сервер будет обрабатывать более одного запроса на каждое соединение.
http://en.wikipedia.org/wiki/HTTP_persistent_connection
2) Да, каждое соединение получает собственный сокет, который представляет собой пару IP: PORT.
http://en.wikipedia.org/wiki/TCP_sockets
3) Если у вас 65 535 человек одновременно запрашивают с одного сервера, вам нужно сделать шаг назад и подумать о том, что вы делаете! :) Серьезно, если вам не очень повезет, вы почувствуете необходимость балансировки нагрузки до того, как решите эту проблему. Проблема, которая могла возникнуть раньше, - это нехватка файловых дескрипторов. По умолчанию в bash 1024 (см. «Ulimit» на странице руководства bash).