Конвейеризация и постоянные соединения
Продолжим изучать концепции интернета вообще и HTTP в частности. Сегодня мы познакомимся с конвейером данных и постоянными соединениями. Конвейерная обработка включает в себя отправку клиентом нескольких HTTP-запросов на сервер без ожидания ответа. Затем ответы должны быть возвращены с сервера в той же последовательности, в которой были получены запросы.
Спецификация HTTP/1.1 (RFC 2616) определяет правила идемпотентности для HTTP-запросов. Дополнительные сведения о спецификациях HTTP см. в статье Протокол HTTP.
Запрашивающий отвечает за то, чтобы запросы были идемпотентными. Идемпотентность означает, что один и тот же результат всегда получается при повторении всех или части серии запросов. Таким образом, если соединение с сервером каким-либо образом не удается, клиент может повторить серию запросов, не зная, выполнил ли сервер все, некоторые или ни один из запросов.
Большинство методов запроса являются идемпотентными, если они используются сами по себе, потому что при каждом использовании метода получается один и тот же результат. (Исключением является метод POST, поскольку он изменяет ресурс на сервере.) Однако, когда последовательность запросов выдается во время конвейерной обработки, последовательность может быть неидемпотентной, особенно если изменяются ресурсы.
Постоянные соединения
Постоянные соединения между веб-клиентом и сервером могут быть повторно использованы для более чем одного обмена запросом и ответом.
Постоянные соединения повышают производительность сети, поскольку для каждого запроса не требуется устанавливать новое соединение. Установление нового соединения требует значительных дополнительных сетевых ресурсов по сравнению с отправкой запроса с использованием существующего соединения.
В HTTP/1.0 действием по умолчанию для сервера было закрытие соединения, когда он получил запрос от веб-клиента и отправил ответ. Если веб-клиент хотел, чтобы сервер сохранял соединение открытым, он должен был отправить заголовок Connection: Keep-Alive в запросе.
Для HTTP/1.1 по умолчанию используются постоянные соединения. Когда между веб-клиентом и сервером устанавливается соединение, сервер по умолчанию сохраняет соединение открытым. Соединение закрывается только в том случае, если веб-клиент запрашивает закрытие, отправив заголовок "Соединение: закрыть", если достигнута настройка тайм-аута сервера или если сервер обнаруживает ошибку.
Если вы планируете конвейеризировать запросы, убедитесь, что последовательность запросов может быть завершена в любой момент и перезапущена с самого начала, не вызывая логической ошибки. В противном случае, делайте запросы индивидуально и ждите подтверждения после каждого запроса.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.