Какие браузеры имеют проблемы с кэшированием ответов XMLHTTPRequest? - PullRequest
7 голосов
/ 24 марта 2009

Есть ли у каких-нибудь популярных браузеров проблемы с кэшированием * ответов XMLHttpRequest, о которых мне нужно знать?

Я хотел бы иметь возможность включать запросы XMLHttpRequest на каждую страницу в качестве метода динамической загрузки содержимого (например, JSON) или поведения (например, eval () ed Javascript), относящегося к типу страницы, но хотел убедиться, что что ресурсы, которые он получает от сервера, могут быть кэшированы, если сервер отправил правильные заголовки.

Я хотел прочитать эту статью, в которой упоминается , что такие браузеры, как Firefox 1.1, не кэшируют контент, полученный с помощью XMLHTTPRequest, и что он всегда запрашивает новые данные, отправленные полностью (с помощью Cache-Control и без If-Modified-Since) независимо от заголовков, отправленных сервером.

Очевидно, что эта статья очень старая - я даже не помню Firefox 1.1; Итак, какие соображения я должен сделать для текущих популярных браузеров, и есть ли хитрость, когда я специально хочу, чтобы ответы были кэшированы?

** Чтобы прояснить мой вопрос, под кэшированием я подразумеваю кэширование на стороне клиента, где сервер выдает информацию о свежести (в форме директивы Cache-Control: max-age или заголовка Expires:) и хранит браузер копия ответа в его кеше вместе с датой истечения срока действия, так что будущие запросы на тот же ресурс, выданные с последующих страниц, могут быть удовлетворены из кеша браузера без необходимости какого-либо контакта с сервером вообще. Все основные браузеры делают это правильно для большинства контента, но я слышал, что Firefox не может сделать это для контента XMLHttpRequest. Я спрашиваю, знает ли кто-нибудь о случаях, когда какой-либо из современных браузеров не кэширует ответы в соответствии со спецификацией при использовании XMLHttpRequest. *

Ответы [ 2 ]

11 голосов
/ 24 марта 2009

Марк Ноттингем имеет превосходный набор функциональных тестов , которые демонстрируют поведение кэширования XMLHttpRequest браузера. Загрузите страницу в браузерах, которые вы хотите поддерживать, и определите, какие методы вы можете и не можете использовать для кэширования своего ответа.

4 голосов
/ 24 марта 2009

Хотя некоторые браузеры имеют разные значения по умолчанию (по умолчанию IE будет кэшировать результаты запросов AJAX, но Firefox по умолчанию не будет), все браузеры, о которых я знаю, будут подчиняться заголовкам http, таким как Cache-Control . Так что просто установите заголовки кэширования правильно для вашего приложения.

Вот пример:

    public ActionResult SomeAction()
    {
        var model = [...];
        Response.AddHeader("Cache-Control", "no-cache");
        return Json(model);
    }

Теперь IE и Firefox будут вести себя одинаково; они никогда не будут кэшировать результаты действия.

...