Каково влияние псевдонимов имен хостов на кэш Java-апплетов?

#java #applet

#java #апплет

Вопрос:

У меня есть два сервера с именами хостов comp1 и comp2 . У меня также есть плавающий псевдоним ( master ), который динамически отображается на один из двух серверов. Я обслуживаю один и тот же идентичный апплет с обоих серверов. Клиенты обычно подключаются к master одному, но вполне допустимо подключаться к любому из них comp1 или comp2 напрямую.

Клиенты жалуются, что им всегда приходится ждать загрузки апплета (он довольно большой). Я думал, что как только клиент загрузит необходимые jar-файлы, они будут кэшированы и не будут загружены снова. Сначала я подумал, что клиентский плагин настроен на не кэширование, но я думаю, что нашел причину проблемы, хотя и не понимаю ее.

  1. Впервые подключите клиент к master (на который в данный момент указывает comp1 ). Необходимо дождаться загрузки jars. Это ожидаемо.
  2. Снова подключите клиент к master . Мне не нужно ждать загрузки jars. Это также ожидаемое / желаемое поведение.
  3. Подключите клиент к comp1 . Необходимо дождаться загрузки jars. Я бы предпочел, чтобы этого не происходило, поскольку это один и тот же сервер, но я могу понять почему, поскольку comp1 клиенту представляется совершенно другой хост.
  4. Подключите клиент обратно к master . Опять же, я должен дождаться загрузки всех jar-файлов. Это не то, что я ожидал.Jars должны были быть загружены уже на шагах 1/2.

Используя панель управления Java, я могу видеть ресурсы, которые находятся в кэше. Мне кажется, что ресурсы привязаны к URL, поэтому я не знаю, почему я получаю то, что я делаю. Кажется, что два разных имени хостов для одного и того же сервера портят кэш клиента.

Я должен упомянуть, что master имя хоста — это не просто DNS-псевдоним. Это фактически другой IP-адрес, к которому comp1/comp2 динамически привязывается / отсоединяется привязка во время выполнения приложения.

Можете ли вы объяснить, что я здесь вижу, или предложить какие-то пути для исследования?

Комментарии:

1. (Апплеты?.. в 2011 году? Боже …)

2. @road to yamburg — <вздох> Я знаю. Это долгая история…

3. Хотя вопрос очень интересный. Я подозреваю, что это как-то связано с безопасностью.

4. @wolcastle: апплет слишком большой? Может ли быть так, что из-за размера апплет сбрасывается (но по какой-то причине URL-адрес все еще отображается на панели управления?). Если вы увеличите размер кэша на панели управления, вы по-прежнему будете наблюдать это поведение?

5. Кроме того, вы могли бы проверить, правильно ли сервер выполняет ifModified-запрос, т. Е. указаны ли даты модификации и подобные вещи.

Ответ №1:

Авенус для расследования:

Это вполне может быть следствием имени файла jar — например, если оно всегда загружается в %TMP%app.jar, тогда app.jar будет проверяться при каждом посещении сервера.

Возможные обходные пути:

  • Псевдоним файла на серверах, чтобы его можно было извлечь как master.jar , compN.jar
  • Используйте 301 или 302, чтобы указать браузеру, что используется только один исходный файл jar (возможно, вам потребуется подписать jar из-за политик того же источника)