Как заставить клиента загружать новую HTML-страницу с новым Java-апплетом
Как я могу заставить браузер клиента загружать новую версию html-страницы новым java-апплетом?
Мы обновили систему на месте, но когда клиент подключился к веб-серверу, старый java-апплет все еще отображался (из кеша).
Как я могу заставить клиента (желательно со стороны сервера) загрузить новую версию вместо той, которая находится в его кэше?
Старая система (до обновления):
- старая версия linux (более 10 лет)
- старый веб-сервер apache (более 10 лет)
- старый Java-апплет (отдельные файлы классов) (около 2 лет)
- старый index.html в корневом каталоге веб-сервера (около 2 лет)
Новая система (после обновления):
- тот же IP-адрес и порт, что и у старой системы
- Windows XP встроенный
- веб-сервер apache/2.2.21 (win32)
- новый java-апплет в jar-файле (все имена классов из старой версии)
- новый index.html в корневом каталоге веб-сервера
Пользователь использует Chrome на компьютере с Windows XP
Когда пользователь загрузил страницу в Firefox, новый Java-апплет был показан и работал без нареканий. (Он никогда не загружал старый Java-апплет в Firefox)
[РЕДАКТИРОВАТЬ]
Добавление строк из Looper в мой httpd.conf не привело к ошибкам, но я не уверен, что это тоже работает...
Кажется, я не могу воспроизвести проблему кеширования моего клиента: когда я что-то изменяю в апплете и загружаю его снова с другого компьютера, ничего не меняется, но когда я перезагружаюсь несколько минут спустя, это действительно показывает новая версия.. без или без этих дополнительных строк с CacheDisable
когда я ищу в httpd.conf "кеш", то все, что я нахожу, это
#LoadModule cache_module modules/mod_cache.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule mem_cache_module modules/mod_mem_cache.so
так вроде кеширование не включено?
когда я сам добавляю строку с CacheDisable (без IfModule), тогда Apache не хочет запускаться, поэтому он, вероятно, портит httpd.conf?
[EDIT2]
так как ОС сервера, веб-сервер, имена классов Java и все имена файлов, кроме index.html, отличаются от старой версии, причиной должен быть кэшированный index.html. Я добавил метатеги из ответа FrancescoMM в свой index.html и надеюсь, что это предотвратит проблему в будущих выпусках
3 ответа
Если классы java отличаются, то индексный файл находится в кеше. Это также может быть клиентский прокси-кеш, поэтому работа на сервере не даст результата.
Самое быстрое решение - отправить новый URL клиенту:
http://www.site.com/index.html?random_param=1234
http://www.site.com/?random=1234
http://www.site.com/?1234
http://www.site.com/?new
или даже просто
http://www.site.com/?
должно быть достаточно.
РЕДАКТИРОВАТЬ
Кроме того, пытались ли вы добавить на HTML-страницу все метатеги "Прагма без кеша" и "Срок действия"? Это должно сказать клиентскому прокси, чтобы перезагрузить страницу в любом случае.
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
Обратите внимание, что EXPIRES специально установлен на старую дату. Это может не решить вашу проблему на этот раз, так как если новый индекс не загружен, никто (сервер, прокси, клиент) не увидит новые теги, но будет следить за тем, чтобы страница загружалась в следующий раз каждый раз.
Если вы не добавите функциональность, позволяющую апплету аннулировать себя на основании серверной инструкции, вам придется выполнить сброс со стороны клиента. Очистку кеша в браузере следует делать, исходя из предоставленной информации. Каждый браузер имеет способ очистки своего кэша. Я не верю, что есть более короткий путь, чем этот.
Каждая система превращается в унаследованную систему с момента ее первого развертывания. Это всегда хорошая идея для планирования обновления. По крайней мере, любой апплет, который осуществляет связь с сервером, должен сообщать серверу свой номер версии, позволяя серверу отклонить службу, запустить обновление, уведомить пользователя или что-либо еще подходящее.
Просто включите no-cache в Apache в httpd.conf.
Из документов Apache:
<IfModule mod_cache.c>
CacheDisable /local_files
</IfModule>
Вместо того, чтобы отключить кэш для всех локальных файлов, вы можете указать полный путь к файлу апплета.