Ну, разумеется, вы не хотите полностью отключать кеш браузера; Правильное кэширование является ключевой частью REST, и тот факт, что он может (при условии правильного соблюдения как клиентом, так и сервером) обеспечить высокую степень кэширования, а также дает точный контроль над истечением срока действия и повторной проверкой, является одним из ключевых преимуществ. 1001 *
Хотя, как вы заметили, существует проблема с последующими GET для того же URI из того же документа (как и в случае времени жизни документа DOM, перезагрузите страницу, и вы получите еще один шанс выполнить этот запрос XMLHttpRequest). Похоже, что IE воспринимает это так, как если бы запросил более одной копии одного и того же изображения или другого связанного ресурса на веб-странице; он использует кэшированную версию, даже если объект не кэшируется.
Firefox имеет противоположную проблему, и отправит последующий запрос, даже когда кэширующая информация говорит, что не должна!
Мы можем добавить случайный или фиктивный параметр с меткой времени в конце строки запроса для каждого запроса. Тем не менее, это немного похоже на крик "ЭТО СПАРТА!" и запихали нашу с трудом добытую загрузку в глубокую яму, которую ни один инспектор по охране труда и технике безопасности не подумал об установке защитной рейки Мы явно не хотим повторять полный безусловный запрос, когда нам это не нужно.
Однако это поведение имеет временную составляющую. Если мы откладываем последующий запрос на секунду, то IE будет повторять запрос в случае необходимости, в то время как Firefox будет соблюдать максимальный возраст и истекает заголовки, а не повторять запрос, когда в этом нет необходимости.
Следовательно, если два запроса могут находиться в пределах секунды друг от друга (либо мы знаем, что они вызываются из одной и той же функции, либо есть вероятность, что два события будут вызывать ее в последовательной последовательности), используя setTimeout
для задержки второго запроса через секунду после завершения первого заставит его правильно использовать кеш, а не в двух разных видах некорректного поведения.
Конечно, задержка секунды - это задержка секунды. Это может быть большим делом или нет, в зависимости от размера загружаемого объекта.
Другая возможность состоит в том, что что-то, что изменяется так быстро, не должно моделироваться как GET-определение состояния ресурса вообще, а как POST-запрос к текущему состоянию ресурса. Это сильно пахнет злоупотреблением REST и POSTing, хотя это и должно быть GET.
Что может означать, что в конечном итоге подход THIS IS SPARTA добавления случайных элементов к строкам запроса - это путь. Это зависит, действительно.