
90
Часть
IL
Компоненты программного обеспечения
Web
кси-сервером к более старой версии, прежде чем прокси-сервер осуществит его пе-
ресылку.
Прокси-сервер не имеет права изменять семантику запроса. В противном случае
клиент, сделавший запрос, может получить не тот ответ, который ожидал, либо по-
лучить его в формате, который не сможет обработать. Например, Web-сервер и
прокси-сервер могут использовать определенный способ кодирования ответа (до-
пустим, новый алгоритм сжатия). Однако прокси-сервер может изменить ответ,
чтобы клиент смог его понять. Номер версии клиента дает прокси-серверу инфор-
мацию об его функциональных возможностях. Таким образом, прокси-серверу воз-
можно придется осуществить декомпрессию сжатого сообщения перед передачей
сообщения клиенту.
По сравнению с клиентом, прокси-сервер взаимодействует с гораздо большим
числом серверов и по природе своей деятельности с большей вероятностью обра-
щается к одному и тому же Web-сайту много раз. Можно избежать многочислен-
ных обращений к DNS для преобразования доменного имени одного и того же сай-
та в IP-адрес, если это уже недавно было сделано от имени другого клиента. Заме-
тим, что обращения к DNS выполняются прокси-сервером только в том случае,
если он является последним в цепочке прокси-серверов между пользовательским
агентом и Web-сервером; в противном случае он просто пересылает запрос следую-
щему прокси-серверу в цепочке.
В качестве Web-клиента прокси-сервер принимает решения об открытии и о
поддержании соединений со многими серверами. Стандартный клиент, действую-
щий от имени одного пользователя, должен поддерживать одновременно неболь-
шое число соединений. Действуя от имени нескольких клиентов, прокси-сервер
должен иметь возможность открывать и поддерживать большое число соединений
одновременно. Прокси-серверу приходится выделять значительные ресурсы для
обслуживания состояний от имени этих соединений, загружать ресурсы с множест-
ва серверов и буферизировать данные. Если ответ генерируется динамически, про-
кси-сервер должен буферизировать ответ на длительное время, прежде чем он смо-
жет закончить пересылку ответа.
3.4.5.
Пример использования прокси-сервера
Мы рассмотрим использование прокси-сервера, взяв за основу пример из вто-
рой главы (раздел 2.3). Клиент загружает документ с несколькими встроенными
изображениями. Теперь предположим, что браузер был настроен для работы через
прокси-сервер.
Допустим, что изображение fool.gif находится в кэше браузера, а изображение
foo2.gif
—
в кэше прокси-сервера. Прокси-сервер может воспользоваться своей
стратегией актуализации содержимого кэша, чтобы решить, может ли кэширован-
ная копия foo2.gif быть возвращена клиенту без повторной ее проверки на исход-
ном сервере. Если прокси-сервер считает, что ответ не является больше актуаль-
ным, он может обновить кэшированный ответ, отправив модифицировагнхый за-
прос исходному серверу. Модифицированный запрос к исходному серверу требует,
чтобы содержимое ресурса было возвращено только в том случае, если ресурс был
изменен с того момента, как он был кэширован прокси-сервером. Если прокси-сер-
вер отправляет запрос и получает новую копию ресурса, ему нужно кэшировать от-
вет и переслать ответ клиенту. Что касается клиента, то он получает ресурс foo2.gif
от прокси-сервера. Клиент не имеет понятия о действиях, предпринятых про-
кси-сервером для получения ресурса. Таким образом, при запросе ресурса foo2.gif
прокси-сервер действует как Web-клиент.