+  HandyCache форум
|-+  Главная категория» Общие вопросы» Ответ "304 Not Modified (HC)"
Имя пользователя:
Пароль:
Страниц: [1] 2 3 ... 5  Все   Вниз
  Отправить эту тему    Печать  
Автор Тема: Ответ "304 Not Modified (HC)"  (Прочитано 58023 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« : 03 марта 2007, 13:34:01 »

DenzZzz
Раз уж встал вопрос об учете при определении процента экономии оветов "304 Not Modified" на запрос "lf-Modified-Since" клиента, то расскажи, плиз, подробнее, как работает эта опция. Давно хотел вникнуть - но все забывал спросить (исходим из того, я читал краткое описание, т.е. общий принцип ясен).
Интересует, как учитываются критерии свежести, когда и как выдается из кэша более новый файл, если таковой есть.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #1 : 03 марта 2007, 14:56:33 »

Цитата с Wiki:

Цитировать
Отвечать "304 Not Modified" на запрос "lf-Modified-Since" браузера

Если URL есть в списке "Не обновлять" или "Только из кэша", то логично просто отослать браузеру ответ "304 Not Modified".

Как происходило раньше до версии 0.98b1. Возможны 2 варианта - файл есть в кэше HC и файла нет в кэше HC:

  • В первом случае, HC повторно отдавал файл из кэша, хотя мог бы просто сказать: "304 Not Modified" и не нагружать диск и систему лишним чтением/передачей файла.
  • А во втором случае, HC транслировал запрос на удаленный сервер, но мог бы также просто сказать "304 Not Modified". Тем более, что таких запросов может быть очень много, тратя время и трафик, а в кэш HC объекты так и не попадут!

Конечно, есть вероятность, что файл в кэше браузера стар и HC не даст ему обновиться, но когда мы пишем файл в список "Не обновлять" без критерия свежести или в "Только из кэша", мы к этому заранее готовы!
К тому же, у пользователя всегда есть возможность очистить собственный кэш браузера и закачать все файлы из кэша HC заново! Можно также включить автоматическую очистку кэша при выходе из браузера.

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


Михаил

Цитировать
Интересует, как учитываются критерии свежести, когда и как выдается из кэша более новый файл, если таковой есть.

  • Независимо от наличия файла в кэше HC если сработало правило в списке "Только из кэша" или правило БЕЗ критерия свежести в списке "Не обновлять", то HC формирует ответ "304 Not Modified", т.е. велит браузеру брать файл из его кэша.
  • Если проверяется правило с заполненным критерием свежести в списке "Не обновлять", то:
    - Если файл есть в кэше HC и его дата в кэше не просрочена по критерию свежести, то правило из списка "Не обновлять" срабатывает и HC формирует ответ "304 Not Modified", т.е. велит браузеру брать файл из его кэша.
    - Если файл есть в кэше, но его дата в кэше просрочена по критерию свежести, или критерий свежести нельзя проверить из-за отсутствия файла в кэше, то правило из списка "Не обновлять" считается НЕ сработавшим - переходим к проверке следующего правила или, если достигнут конец списка, запрос браузера транслируется на сервер.
« Последнее редактирование: 03 марта 2007, 23:37:07 от DenZzz » Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #2 : 03 марта 2007, 22:04:37 »

Если файла нет в кэше HC ... то список "Не обновлять" считается НЕ сработавшим - запрос браузера транслируется на сервер.
.....
Независимо от наличия файла в кэше HC если сработало правило БЕЗ критерия свежести в списке "Не обновлять" ... то HC формирует ответ "304 Not Modified", т.е. велит браузеру брать файл из его кэша.
Так что все-таки должно происходить, когда файла нет в кэше НС?

Добавлено: И еще вопрос. Если от клиента поступило If-Modified-Since и стоит опция "Добавлять IMS", изменяется ли в этом случае исходное IMS при пересылке запроса на сервер?
« Последнее редактирование: 03 марта 2007, 22:14:14 от Михаил » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #3 : 03 марта 2007, 22:24:20 »

Так что все-таки должно происходить и что происходит, когда файла нет в кэше НС?

Поправил свой пост выше... Так понятнее? Подмигивающий

Цитировать
Добавлено: И еще вопрос. Если от клиента поступило If-Modified-Since и стоит опция "Добавлять IMS", изменяется ли в этом случае исходное IMS при пересылке запроса на сервер?

Нет. "If-Modified-Since" остается браузерным.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #4 : 03 марта 2007, 22:39:32 »

Поправил свой пост выше... Так понятнее? Подмигивающий
М-да... Неясно и так. Давай попробуем еще раз. Улыбка
"Обычный" порядок (запрос от клиента без IMS): После проверки списка "Т" и отсутствия в нем файл проверяется на наличие его в кэше. Если есть - идет проверка списка "Н". Если нет в кэше - качаем из сети.
Если приходит запрос с IMS, этот порядок как-то меняется? Или что-то другое происходит, не пойму никак.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #5 : 03 марта 2007, 23:13:52 »

"Обычный" порядок (запрос от клиента без IMS): После проверки списка "Т" и отсутствия в нем файл проверяется на наличие его в кэше. Если есть - идет проверка списка "Н". Если нет в кэше - качаем из сети.
Если приходит запрос с IMS, этот порядок как-то меняется? Или что-то другое происходит, не пойму никак.

Если получен запрос с "If-Modified-Since":

1. Проверяем список Т - если сработал, то наличие файла в кэше можно не проверять, а сразу ответить браузеру "304".
2. Если Т не сработал, то проверяем наличие файла в кэше.
2а. Если файл есть в кэше, то проверяем все строки списка Н.
2б. Если файла нет в кэше, то проверяем в списке Н только строки без критерия свежести.
3. Если сработала хоть одна строка списка Н, то отвечаем браузеру "304".
4. Если список Н не сработал, грузим файл из Инета.

Вот такая логика.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #6 : 03 марта 2007, 23:46:51 »

DenZzz
Теперь гораздо понятней.
Да... пожалуй, когда мы в такой ситуации отвечаем "304",  то при расчете процента экономии этих телодвижений учесть никак не удастся...
Только вот такой вопрос еще:
1. Если файл есть в кэше НС, не просрочен и IMS < Даты изменения этого файла, почему мы отвечаем "304", а не отдаем файл из кэша?
2. Если файла нет в кэше НС, почему в случае наличия правила без критерия свежести мы отвечаем "304", а не лезем в сеть?
По ходу пьесы получилось, что вопросЫ Улыбка
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #7 : 04 марта 2007, 00:06:37 »

1. Если файл есть в кэше НС, не просрочен и IMS < Даты изменения этого файла, почему мы отвечаем "304", а не отдаем файл из кэша?

Потому что мы ничего не знаем о том, какой "Last-Modified" имел файл, когда мы его записали в кэш HC. Вполне вероятно, что у браузера тот же файл, но закаченный мимо HC...

Цитировать
2. Если файла нет в кэше НС, почему в случае наличия правила без критерия свежести мы отвечаем "304", а не лезем в сеть?

А зачем нам лезть в сеть, если нам наплевать на свежесть этого файла, что мы и прописали в списке Н.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #8 : 04 марта 2007, 00:16:56 »

Потому что мы ничего не знаем о том, какой "Last-Modified" имел файл, когда мы его записали в кэш HC. Вполне вероятно, что у браузера тот же файл, но закаченный мимо HC...
Почему отвергаем вероятность противоположного исхода (у клиента старый и неактуальный файл)?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #9 : 04 марта 2007, 00:25:15 »

Почему отвергаем вероятность противоположного исхода (у клиента старый и неактуальный файл)?

Потому что:
1. Мы не можем это проверить.
2. У клиента есть простой способ синхронизировать кэши - принудительно очистить кэш браузера или включить его автоочистку при выходе.

P.S. Только не предлагай хранить еще и "Last-Modified" - овчинка выделки не стоит... Улыбка
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #10 : 04 марта 2007, 00:30:45 »

P.S. Только не предлагай хранить еще и "Last-Modified" - овчинка выделки не стоит... Улыбка
Пока еще не созрел до этого предложения... Но чем черт не шутит Подмигивающий
Предлагаю отдавать файл в этом случае (если он есть в кэше НС, не просрочен и IMS < Даты изменения этого файла) из кэша НС.

Добавлено: чтоб браузер и дальше мог рационально вставлять IMS, можно выдачу этого файла из кэша сопроводить полем Last-Modified = Дата изменения файла. И подумать, мож это поле стоит втыкать вообще всегда, когда файл берется из кэша? Или оно и сейчас втыкается?
« Последнее редактирование: 04 марта 2007, 00:44:58 от Михаил » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #11 : 04 марта 2007, 00:48:26 »

Предлагаю отдавать файл в этом случае (если он есть в кэше НС, не просрочен и IMS < Даты изменения этого файла) из кэша НС.

Для этого придется постоянно парсить IMS, а полезность этой процедуры, скорее всего, будет не велика...

Цитировать
Добавлено: чтоб браузер и дальше мог рационально вставлять IMS, можно выдачу этого файла из кэша сопроводить полем Last-Modified = Дата изменения файла.

Так всегда и делается, если ты не заметил! Иначе браузер вообще не будет формировать IMS... Подмигивающий
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #12 : 04 марта 2007, 00:57:01 »

Для этого придется постоянно парсить IMS, а полезность этой процедуры, скорее всего, будет не велика...
1. Мы ж и так парсим заголовок. Считать значение IMS легко в ходе этой процедуры.
2. Но это не главное. Главное - не допустить выдачу пользователю неактуального файла!
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #13 : 04 марта 2007, 01:35:40 »

Михаил

Цитировать
Предлагаю отдавать файл в этом случае (если он есть в кэше НС, не просрочен и IMS < Даты изменения этого файла) из кэша НС.

У того, что ты предлагаешь, есть побочный эффект!

Представь, зашли на новый сайт, картинки загрузились в кэш браузера и записались в кэш HC. Нажали "Обновить" и получили перезагрузку всех тех же картинок, но теперь из кэша HC, т.к. IMS с сайта < Даты записи в кэш HC !

Причем, такая ситуация будет встречаться постоянно, в отличие от твоих опасений, что у клиента вдруг окажется старый и неактуальный файл! Т.к. у клиента есть простой способ этого избежать - просто временами чистить кэш браузера!
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #14 : 04 марта 2007, 12:30:14 »

DenZzz
Молча выдать файл из кэша - гораздо быстрее и прозрачнее, чем озабочивать пользователя чисткой кэша браузера. Последнее к тому же:
  - заранее неизвестно, когда надо делать, чтоб не получить неактуальный файл;
  - сопряжено с дополнительной ненужной нагрузкой на пользователя.
С каких пор взятие из собственного кэша НС стало "побочным эффектом"?
Теперь представь ситуацию: два пользователя А и Б на одном кэше. У А правило в списке "Н" с критерием свежести, к примеру, 10 минут для новостного сайта. У Б такого правила нет. Оба пользуются сайтом регулярно. Пусть файл записался в кэш, и пошли эти самые 10 минут. После этого каждые 5 минут Б обращается к сайту, и файл в кэше обновляется. Чтоб проще было представить такую ситуацию, пусть пользователь Б не один, а их много. Тогда пользователь А НИКОГДА не дождется обновления файла, пока его клиент будет посылать IMS!
Такого допускать, на мой взгляд, нельзя.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #15 : 04 марта 2007, 13:01:11 »

С каких пор взятие из собственного кэша НС стало "побочным эффектом"?

С тех пор, как было решено, что повторно посылать браузеру файл, который у него уже есть - неоптимально и бессмысленно! Подмигивающий

Цитировать
Теперь представь ситуацию: два пользователя А и Б на одном кэше.
...
Чтоб проще было представить такую ситуацию, пусть пользователь Б не один, а их много.

Вообще-то, писать в общий кэш должен только один пользователь - другие только читать! Так рекомендуется...
А если HC стоит только на сервере, то и правила у всех одни!

Цитировать
Тогда пользователь А НИКОГДА не дождется обновления файла, пока его клиент будет посылать IMS!
Такого допускать, на мой взгляд, нельзя.

Есть сила в твоих словах! Улыбка Надо только решить, какое из "зол" большее:
- частые повторные отправки неизменившихся файлов пользователям
или
- возможное необновление старого файла у клиента в некоторых редких ситуациях...
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #16 : 04 марта 2007, 13:11:24 »

DenZzz
Цитировать
Надо только решить, какое из "зол" большее:
- частые повторные отправки неизменившихся файлов пользователям
или
- возможное необновление старого файла у клиента в некоторых редких ситуациях...
"Частота" и "редкость" ситуаций будут плавать в зависимости от конкретной конфигурации/стиля серфинга.
К тому же зачем нам вообще неадекватная информация, пусть даже в редких случаях, не говоря уж о варианте частых?
« Последнее редактирование: 04 марта 2007, 13:28:26 от Михаил » Сообщить модератору   Записан
cepera_ang
Beta tester
*****

Репутация: +9/-4
Offline Offline

Сообщений: 355


« Ответ #17 : 04 марта 2007, 14:58:38 »

К тому же зачем нам вообще неадекватная информация, пусть даже в редких случаях, не говоря уж о варианте частых?
Зачем нам вообще НС с правилами прямо указывающими выдавать старый файл вместо проверки, даже если это прямо запрещает сервер, если мы невероятно боимся даже редких случаев необновления файла, не говоря уже о частых?
Отличный алгоритм, глюков от его работы словить затруднительно, гораздо проще накосячить где-нибудь в другом месте...
Сообщить модератору   Записан
v0lt
Beta tester
*****

Репутация: +7/-0
Offline Offline

Сообщений: 127


« Ответ #18 : 04 марта 2007, 16:53:24 »

Михаил
Я вообще критерием свежести не пользуюсь. В списке "Не обновлять" у меня только графика и др. оформление. Если надо обновить картинку, то просто держа горячую клавишу жму на "Загрузить изображение". Мне не хочется, чтобы незаблокированные банеры втихую обновлялись.
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #19 : 04 марта 2007, 17:49:28 »

серега_ang
Цитировать
Зачем нам вообще НС с правилами прямо указывающими выдавать старый файл вместо проверки, даже если это прямо запрещает сервер, если мы невероятно боимся даже редких случаев необновления файла, не говоря уже о частых?
Что толку от оптимизации, когда она достигается ценой правильности работы? Зачем нам неправильно (не так как мы хотим) работающий НС?
v0lt
Цитировать
Я вообще критерием свежести не пользуюсь. В списке "Не обновлять" у меня только графика и др. оформление. Если надо обновить картинку, то просто держа горячую клавишу жму на "Загрузить изображение". Мне не хочется, чтобы незаблокированные банеры втихую обновлялись.
Ты, видимо, недопонял. Либо я недопонял твою мысль. Речь об обновлении (в смысле из интернета) пока не идет вовсе. Выбор между:
  - ответить клиенту: "304" в надежде (на мой взгляд, необоснованной), что это не приведет к выдаче устаревшей информации;
  - выдать файл из кэша НС с гарантией актуальности данных.
Сообщить модератору   Записан
Страниц: [1] 2 3 ... 5  Все   Вверх
  Отправить эту тему    Печать  

 
Перейти в: