Случайный Querystring для предотвращения кэширования IE

Я могу думать о следующих причинах:

  • Хранение набора зафиксированных типов вызванной исключительной ситуации, как часть API, так, чтобы вызывающие стороны только волновались о фиксированном наборе исключений. В Java Вы практически вынуждены сделать это из-за механизма контролируемых исключительных ситуаций.

  • Добавление некоторой контекстной информации к исключению. Например, вместо того, чтобы позволить пустой "записи, не найденной", проходят от DB, Вы могли бы хотеть поймать его и добавить "... при обработке порядка № XXX, поиске продукта YYY".

  • Выполнение некоторой очистки - заключительные файлы, откатывая транзакции, освобождая некоторые дескрипторы.

10
задан Community 23 May 2017 в 12:02
поделиться

6 ответов

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

Вы можете использовать строка запроса с ограничением по времени это изменяется только каждые 15 секунд (или в любой другой период времени), поэтому вы уменьшите количество обращений к серверу, так как вы увидите локально кэшированный контент в течение этих 15 секунд.

Если у вас есть стандартный совместимый браузер , вы можете обойтись, только используя ETags .

2
ответ дан 3 December 2019 в 18:35
поделиться

Вы также можете использовать текущее время Unix в миллисекундах, чтобы избежать проблемы большого количества запросов за одну секунду (гораздо меньше шансов получить несколько запросов за одну миллисекунду)

var url = "http://whatever.com/stuff?key=value&ie=" + (new Date()).getTime();
6
ответ дан 3 December 2019 в 18:35
поделиться

Использование случайного числа (не временной метки) в строке запроса или фактическое изменение имени файла - это два рекомендуемых метода. Стив Содерс и группа специалистов YAHOO! опубликовали тонну полезной информации и методов, которые они обнаружили и разработали при оптимизации одного из самых посещаемых объектов в мире.

2
ответ дан 3 December 2019 в 18:35
поделиться

У меня та же проблема, но будьте осторожны, за одну секунду может быть много запросов. Вот почему я использую это:

$.getJSON("http://server/example?param=value&dummy=" + Math.random(), ...);
0
ответ дан 3 December 2019 в 18:35
поделиться

Пробовали ли вы добавить в ответ заголовок ETag ? Вы можете использовать случайное значение или контрольную сумму сгенерированной страницы, чтобы при необходимости использовалась кешированная версия.

Я не уверен, как себя ведет IE, но с последними версиями это должно работать.

См. также раздел HTTP RFC в ETag

0
ответ дан 3 December 2019 в 18:35
поделиться

Предполагая, что вы используете jQuery, вместо использования $ .get или $ .getJson, используйте более общий $ .ajax и явно установите для значения кэша значение false. Ниже приведен пример:

$.ajax({
        url: "/Controller/Action",
        cache: false,
        type: "GET",
        dataType: "json",
        success: function(data, textStatus) {
                         alert("success");
                 }
    });

Требуется немного больше кода (хотя и не намного), чем при использовании .getJson или .get, но решит проблему чисто, без добавления случайных чисел.

11
ответ дан 3 December 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: