Как определить, отличается ли содержимое веб-страницы от кэшированной версии - PullRequest
0 голосов
/ 01 октября 2010

Привет, ребята. Как вы знаете, процесс проверки содержимого веб-страниц немного отличается от статических страниц или личных файлов на наших машинах, поскольку содержимое динамических веб-страниц изменяется при каждом запросе.Так что, если мы собираемся использовать контрольные суммы для выявления изменений, мы потерпим неудачу!очень простой пример, когда владелец сайта использует Google Ads на своем сайте;По каждому запросу объявления отличаются от предыдущих.Также, если мы собираемся кешировать только по периодам времени, мы также потерпим неудачу, потому что некоторые веб-страницы обновляются не каждый год, а некоторые - каждые минуты (если не секунды).решить эту проблему?(Спасибо)

ОБНОВЛЕНИЕ

Другой вариант - использование http-заголовка LastModified!но это сильный подход?

1 Ответ

2 голосов
/ 03 октября 2010

Браузеры делают это автоматически с помощью нескольких механизмов кэширования, которые предоставляет HTTP. Два механизма, наиболее очевидно полезных для определения того, изменилась ли страница, - это концепция Теги сущности и заголовок HTTP Last Modified . Эти механизмы позволяют браузеру делать условные запросы к веб-сайту, например. получить страницу, только если она была изменена.

Цитирование RFC 2616 по HTTP 1.1:

3.11 Теги сущности

Теги сущностей используются для сравнения двух или более сущностей из одного запрашиваемый ресурс. HTTP / 1.1 использует теги сущностей в ETag (раздел 14.19), If-Match (раздел 14.24), If-None-Match (раздел 14.26) и Поля заголовка If-Range (раздел 14.27). Определение того, как они используются и сравниваются как валидаторы кеша в разделе 13.3.3. тег сущности состоит из непрозрачной строки в кавычках, возможно с префиксом показатель слабости.

Ключевым моментом здесь является то, что ETag является средством проверки кэша . Если браузер имеет кэшированную версию страницы (в RFC называемую resource ), он может использовать ETag , чтобы определить, действительна ли кэшированная страница, т.е. если страница не изменилась на сервере.

А по поводу даты модификации:

14.25 Если модифицирован-С

Поле заголовка запроса If-Modified-Since используется с методом для сделать условным: если запрошенный вариант не был изменен поскольку время, указанное в этом поле, объект не будет вернулся с сервера; вместо этого ответ 304 (не измененный) быть возвращенным без какого-либо тела сообщения.

Ключевым моментом здесь является то, что сервер может знать, когда страница была изменена, и затем может информировать клиента.

Если вы откроете монитор HTTP (например, Fiddler для Windows) и увидите, как ваш браузер общается с веб-сайтами, вы увидите использование этих механизмов из первых рук, когда браузер делает условные запросы.

Чтобы конкретно ответить на ваш вопрос о заголовке Last Modified , этот заголовок сам по себе не будет работать для большинства страниц, которые вы найдете. Но в сочетании с ETag он может помочь вам начать работу.

...