2009-12-07 2 views
2

Это опасная вещь, которую я чувствую, о которой я должен знать больше, но я этого не знаю и не могу найти много.Как браузер узнает, что веб-страница изменилась?

Вопрос: Как именно браузер знает, что веб-страница изменилась?

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

Любые указатели оценили!

+0

Оу, ваш спрашивать, как делает браузер знает, обновлена ​​ли веб-страница, поэтому она не отображает старый. Ну, я предполагаю, что он получает HTML-код для каждого загружаемого файла, но если изображение или что-то изменится, он не будет знать, пока кеш не будет сильно обновлен или удален. (просто догадаться) –

+3

* Не обманывайте. * –

+0

просто помните, что не все сайты уважают HTTP-заголовки Last-Modified и/или Etag, и до недавнего времени Stackoverflow.com didn ' t либо! – jldupont

ответ

5

Браузеры обычно получают эту информацию через HTTP-заголовки, отправленные со страницы.

Например, заголовок Last-Modified сообщает браузеру, сколько лет на странице. Браузер может отправить простой запрос HEAD на страницу, чтобы получить последнее модифицированное значение. Если он новее, чем браузер в кеше, браузер может его перезагрузить.

Существует также множество других заголовков, связанных с кешированием (например, Cache-Control). Выезд: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

+0

+1 Больше, чем мой ответ, такая же идея, хотя ... хороший ответ – LorenVS

+0

Замечание: современные браузеры почти никогда не отправляют запрос на голову самостоятельно. Во время отладки приложения и доступа к нему через браузеры я никогда не видел запроса на голову - https://stackoverflow.com/questions/33444413/do-any-modern-browsers-ever-issue-an-http-head-request –

2

Веб-браузеры отправляют HTTP-запросы и получают ответы HTTP. Затем они отображают содержимое HTTP-ответов. Обычно HTTP-ответы будут содержать HTML. И многим элементам HTML могут потребоваться новые запросы для получения различных частей страницы. Например, каждое изображение обычно представляет собой другой HTTP-запрос.

Есть HTTP-заголовки, которые указывают, является ли страница новой или нет. Например, последняя измененная дата. В веб-браузерах обычно используется условное GET (условное поле заголовка) или запрос HEAD для обнаружения изменений. Запрос HEAD получает только заголовки, а не фактический запрашиваемый ресурс.

Условный GET HTTP-запрос вернет статус 304 Not Modified, если никаких изменений не будет.

страница может потом меняться в зависимости от:

  • вход пользователя
    • После ввода данных пользователя, изменения могут произойти на основе Java-код, выполняемый без постбэк
    • После ввода данных пользователя, новый запросить сервер и получить совершенно новую (возможно, такую ​​же) страницу.
  • Код Javascript может работать после того, как страница уже загружена и изменит ситуацию в любое время. Например, у вас может быть таймер, который что-то изменяет на странице.
  • Некоторые страницы также содержат теги HTML, которые будут прокручивать или мигать или иметь другое поведение.
2

Вы идете по правильному пути, и, как сказал Джонатан, ничто не лучше, чем чтение документов.Однако, если вам нужна только дополнительная информация:

Есть заголовки ответов HTTP, которые позволяют серверу установить кешируемость страницы, которая попадает в вашу систему истечения срока действия. Однако другой важной конструкцией является запрос HTTP HEAD, который по существу извлекает MIME-тип и Content-Length (если имеется) для данной страницы. Браузеры могут использовать запрос HEAD, чтобы проверить, что в их кэшей ...

Существует, безусловно, больше информации на эту тему, поэтому я хотел бы предложить читать документы ...

Смежные вопросы