Chrome (и, возможно, другие браузеры), кеширующие мой скрипт, включают - PullRequest
0 голосов
/ 15 ноября 2011

ПРОБЛЕМА:

Я размещаю виджет на веб-сайте клиента, который будет отличаться для каждой страницы сайта.

Чтобы отобразить виджет, клиент включает тег script на своих страницах. Этот тег сценария загружается для каждой страницы сайта, и код, который он возвращает, зависит от страницы.

Итак, если этот сценарий кэшируется, конечный результат заключается в том, что мы обслуживаем виджет для неправильной страницы.

Прямо сейчас, когда мы обслуживаем сценарий, мы устанавливаем заголовки ответа

Cache-Control: max-age=0
Expires : 24 hours in the past

но иногда браузеры все еще кэшируют скрипт.

ВОПРОС:

Есть ли способ использовать заголовки http, чтобы остановить кэширование во всех случаях, или нам придется использовать совершенно другой подход?

UPDATE:

Заголовки, рекомендованные topek, значительно улучшили не-кэшируемость скриптов. Однако (опять же в Chrome, который кажется наиболее агрессивным в кеше) при использовании кнопок «назад», «вперед» или «перезагрузка» сценарий все еще кэшируется. Если вы действительно нажмете на что-нибудь, оно будет получено с сервера.

Кажется, что единственный надежный способ остановить кэширование - это установить источники сценариев, которые гарантированно будут разными для каждой загрузки страницы (как предложено esilija и tejs).

1 Ответ

1 голос
/ 15 ноября 2011

Эти два заголовка должны помочь:

response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.setHeader("Expires", "Sat, 26 Jul 1997 05:00:00 GMT");

или вы задаете имя в соответствии с текущей страницей, например, когда пользователь запрашивает страницу http://domain/posts/1, тогда имя сценария может быть http://domain/script/scriptname/posts/1.При таком подходе сценарий будет по-прежнему кэшироваться на странице.

Не добавляйте строку запроса в сценарий, например script.js?random_string.Прокси не играют хорошо с таким подходом.Если вы хотите поместить в имя случайную строку, поместите ее перед .js, например script-0934234234.js, и перезапишите запрос на вашем сервере.

...