2010-07-21 5 views
0

Говорят, что часы веб-серверов должны быть одинаковыми для заголовков и Cache-Control для работы? Почему это? Разве они не могут быть отключены на 1 секунду или несколько минут?Будет ли кэширование работать, если на одном из веб-серверов есть часы, которые слегка отключены?

Если кеш должен быть хорошим в течение 1 года, не будет ли разница во времени в несколько минут или даже нескольких часов недействительной на одном или нескольких веб-серверах?

В documentation говорится, что:

отметить, что для того, чтобы это [кеширования] к работе, все серверы приложений должны возвращать те же временные метки. Это означает, что они должны синхронизировать их часы . Если один из них дрейфует , вы увидите разные временные метки , а кеш не будет работать. В этом случае браузер запросит те же активы и снова даже подумал, что они не изменение. Вы можете использовать что-то вроде Live HTTP Headers для Firefox до убедитесь, что кеш действительно работает .

ответ

0

Если вы запустите ntpd на всех своих хостах (и вы do, не так ли?), Они будут более чем достаточно близки. Он имеет меньше общего с заголовками, чем с контроллерами кэширования, генерирующими ?1232285206 в конце URL-адресов. Это всего лишь эпоха эпохи Unix (секунды с 00:00:00 1 января 1970 года), поэтому в течение нескольких секунд нужно делать все, что нужно для контента, доступного для кэширования. ntpd обычно поддерживает четверть-второй или менее толерантность. (В серии тестов ntpdate против нескольких серверов времени мой компьютер был не более чем на 15 секунд.)

+0

, если это число, например '1232285206', то не должно ли это быть во второй раз? (потому что '? 1232285206' и'? 1232285207' создадут другой URL уже.) также, даже если он является точным для второго, не будет таких случаев, как когда один контроллер работает, время 12: 03.999997 и на другая машина, контроллер работает в 12: 04.000001, и поэтому они «выключены» на одну секунду (если число усечено (по math.floor)) –

+0

Конечно, но есть хорошие шансы, что ваши активы не меняются несколько раз в одна секунда - они просто должны быть достаточно правы, когда запрос обрабатывается. Когда вы меняете свои активы, устаревшие активы могут раздаваться почти целую секунду. Если вы не можете терпеть одноставочное время, то, возможно, кеширование ваших активов - не очень хорошая идея.Но большинство веб-сайтов могут обрабатывать один-второй устаревшие кэшированные объекты. Если часы на ваших серверах были отключены на десять секунд, вы могли бы раздавать 11-секундные устаревшие данные. Но на самом деле, просто запустите ntpd и будьте счастливы. :) – sarnold

+0

Спасибо за ваш ответ. Что вы имеете в виду, что большинство веб-сайтов могут «обрабатывать» один-второй устаревшие кэшированные объекты? Разве это не браузер, который решает, перезагружать ли что-нибудь? Можете ли вы указать это в конкретных терминах ... и почему/как веб-сервер не заботится о нескольких вторых различиях и о том, какой механизм работает, и каков предел (10 секунд? 15?) –

0

Обратите внимание, что это Rails специфично и только в том случае, если у вас более одного веб-сервера, обслуживающего данные.

Учитывая, что кеш хранит данные с использованием метки времени, если серверы отличаются тем, что относится к временной шкале, кеш всегда будет признан недействительным на одном из них (тот, у которого есть «старая» временная метка), поскольку он всегда будет думать файл был недавно обновлен и, таким образом, считает запрос пропущенным кешем.

+0

это из-за другого заголовка? Потому что, если это просто 'Expires' и' Cache-Control', тогда время, отведенное на время, не должно иметь значения. Значит, вы имеете в виду, что часы должны быть точными ко второму? Что делать, если машина может отключиться через секунду через несколько часов или даже через 1 час? Тогда все машины должны синхронизироваться с тем же самым временем каждые полчаса? –

+0

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