2010-10-01 2 views
0

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

Итак, что лучше подходит для решения этой проблемы? (Спасибо)

UPDATE

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

+1

HTTP имеет несколько механизмов для этого. Например, см. Http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html – bzlm

+0

Спасибо, это очень полезная статья. – Sadegh

+0

@bzlm, пожалуйста, скопируйте комментарий на новый ответ. – Sadegh

ответ

2

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

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

3,11 Entity Метки

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

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

И о дате изменения:

14.25 If-Modified-Since

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

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

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

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

+0

Ваши описания просты, но очень полезны! Еще раз спасибо;) – Sadegh

+0

@Sadegh Do сообщите нам, если у вас есть еще вопросы. – bzlm