HTTP: last-modified, if-modified-since
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 18.01.20 14:43
Оценка: 6 (1)
Внезапно озадачился вопросом, отдает ли мой сервер last-modified в HTTP-заголовках, и поддерживает ли if-modified-since. Оказалось, что не отдает и не поддерживает, и до хренища разных популярных серверов, судя по выдаче браузера и результатам этого сервиса, работают точно так же. Многие серверы вместо этого отдают expires со временем через секунду от запроса. А в сети опубликовано неимоверное количество статей с описанием того, как добавить last-modified через PHP.

Что за дичь? Почему вокруг столь простой и очевидной вещи, как время последнего изменения страницы, возникла чуть ли не теория заговора? Или это отголовски каких-то прошлых SEO-войн?

Как тогда поисковики обновляют свои индексы? Тупой периодической загрузкой полных страниц, плюс по результатам обновления sitemap?
http last-modified if-modified-since
Re: HTTP: last-modified, if-modified-since
От: Слава  
Дата: 18.01.20 14:58
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Что за дичь? Почему вокруг столь простой и очевидной вещи, как время последнего изменения страницы, возникла чуть ли не теория заговора? Или это отголовски каких-то прошлых SEO-войн?


А вы представьте себе реализацию этого на уровне какой-нибудь CMS. Процесс формирования любой страницы — это обход дерева, начиная от листьев и до корня, и временем последней модификации в корне будет время листа/узла, который был изменён самым последним. Вы такой механизм хоть в одной CMS видели? Или в типичном веб-сервисе на asp.net?
Re: HTTP: last-modified, if-modified-since
От: vsb Казахстан  
Дата: 18.01.20 15:06
Оценка:
Универсальную поддержку таких заголовков сделать невозможно. А самому делать никто не запрещает. Для статических ресурсов оно обычно работает нормально. Для динамических надо делать ручками.
Re: HTTP: last-modified, if-modified-since
От: Pzz Россия https://github.com/alexpevzner
Дата: 18.01.20 15:27
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Внезапно озадачился вопросом, отдает ли мой сервер last-modified в HTTP-заголовках, и поддерживает ли if-modified-since. Оказалось, что не отдает и не поддерживает, и до хренища разных популярных серверов, судя по выдаче браузера и результатам этого сервиса, работают точно так же. Многие серверы вместо этого отдают expires со временем через секунду от запроса.


У тебя, небось, страница собирается на стороне сервера из запчастей. Откуда бы Апачу знать про каждую из запчастей, когда она была в последний раз модифицированна?

EM>А в сети опубликовано неимоверное количество статей с описанием того, как добавить last-modified через PHP.


Ну да. Если страница генерируется PHP-ным скриптом, то ему, скрипту, казалось бы и знать, в какой момент она была последний раз модифицированна. А в статьях описывается, каким образом он эти знания может Апачу передать, чтобы они в HTTP-заголовок попали.
Re[2]: HTTP: last-modified, if-modified-since
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 18.01.20 16:01
Оценка:
Здравствуйте, Слава, Вы писали:

С>А вы представьте себе реализацию этого на уровне какой-нибудь CMS. Процесс формирования любой страницы — это обход дерева, начиная от листьев и до корня, и временем последней модификации в корне будет время листа/узла, который был изменён самым последним.


И что в этом сложного? Каждый из источников-фрагментов, лежащих в хранилище, в любом случае имеет метку времени изменения. А если страница генерится вообще на лету, без привязки к хранимым данным, то можно и прямо в скрипте время указать, хоть текущее. Но его ж вообще нет в большинстве ответов.
Re[2]: HTTP: last-modified, if-modified-since
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 18.01.20 16:05
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>У тебя, небось, страница собирается на стороне сервера из запчастей. Откуда бы Апачу знать про каждую из запчастей, когда она была в последний раз модифицированна?


Дык, у меня их сам Апач и вставляет, через SSI/include. Неужто бы он надорвался заодно и время модификации вычислять?

Pzz>Если страница генерируется PHP-ным скриптом, то ему, скрипту, казалось бы и знать, в какой момент она была последний раз модифицированна.


Если скриптом, то понятно. Но Апач, как я понимаю, отдает время только для полностью статической страницы, в которой нет ни одного include. Это как-то слишком уж радикально.
Re[3]: HTTP: last-modified, if-modified-since
От: Слава  
Дата: 18.01.20 16:12
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>И что в этом сложного? Каждый из источников-фрагментов, лежащих в хранилище, в любом случае имеет метку времени изменения. А если страница генерится вообще на лету, без привязки к хранимым данным, то можно и прямо в скрипте время указать, хоть текущее. Но его ж вообще нет в большинстве ответов.


А то сложного, что немало говномоделей говноданных, не говоря уже о данных их внешних говносервисов, подобных меток времени не имеют, не предусмотрено архитектором (джуниором, то есть).
Re[4]: HTTP: last-modified, if-modified-since
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 18.01.20 16:23
Оценка:
Здравствуйте, Слава, Вы писали:

С>А то сложного, что немало говномоделей говноданных, не говоря уже о данных их внешних говносервисов, подобных меток времени не имеют, не предусмотрено архитектором (джуниором, то есть).


То есть, Апач с его технологией SSI/include сюда тоже входит?
Re[5]: HTTP: last-modified, if-modified-since
От: vsb Казахстан  
Дата: 18.01.20 16:26
Оценка: 18 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

С>>А то сложного, что немало говномоделей говноданных, не говоря уже о данных их внешних говносервисов, подобных меток времени не имеют, не предусмотрено архитектором (джуниором, то есть).


ЕМ>То есть, Апач с его технологией SSI/include сюда тоже входит?


SSILastModified это не оно?
Re[6]: HTTP: last-modified, if-modified-since
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 18.01.20 16:58
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>SSILastModified это не оно?


О, спасибо, оно! Делает то, что надо.

Я ж в первую очередь вбил гуглу запрос "apache last-modified", но на него высыпало кучу страниц с советами делать через PHP, поэтому даже мысли не возникло лезть напрямую в документацию. Хороший пример того, как мусор маскирует полезную информацию.
Re[3]: HTTP: last-modified, if-modified-since
От: Ops Россия  
Дата: 19.01.20 10:01
Оценка: +2 :)
Здравствуйте, Евгений Музыченко, Вы писали:

С>>А вы представьте себе реализацию этого на уровне какой-нибудь CMS. Процесс формирования любой страницы — это обход дерева, начиная от листьев и до корня, и временем последней модификации в корне будет время листа/узла, который был изменён самым последним.


ЕМ>И что в этом сложного?

В программировании есть только две сложные вещи: инвалидация кэша и именование сущностей.

Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[5]: HTTP: last-modified, if-modified-since
От: Ops Россия  
Дата: 19.01.20 10:10
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>То есть, Апач с его технологией SSI/include сюда тоже входит?


Если он сам все собирает и раздает, статику с SSI, то проблемы не будет — он может на дату изменения файлов смотреть. А вот когда ему отдают динамику без таких заголовков, он сам решить не может. В принципе он может посчитать хеш и отдать, например, ETag, но бекэнд все равно должен будет отработать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[6]: HTTP: last-modified, if-modified-since
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 19.01.20 11:11
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Если он сам все собирает и раздает, статику с SSI, то проблемы не будет — он может на дату изменения файлов смотреть.


По сути он так и делает — мне выше подсказали, что нужно включить SSILastModified. Удивительно, что в тех рекомендациях/обсуждениях, которые гугл находит первыми по целевому запросу, нет указаний на этот параметр.
Re: HTTP: last-modified, if-modified-since
От: Михaил  
Дата: 19.01.20 12:19
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Внезапно озадачился вопросом, отдает ли мой сервер last-modified в HTTP-заголовках, и поддерживает ли if-modified-since. Оказалось, что не отдает и не поддерживает, и до хренища разных популярных серверов, судя по выдаче браузера и результатам этого сервиса, работают точно так же. Многие серверы вместо этого отдают expires со временем через секунду от запроса. А в сети опубликовано неимоверное количество статей с описанием того, как добавить last-modified через PHP.


ЕМ>Что за дичь? Почему вокруг столь простой и очевидной вещи, как время последнего изменения страницы, возникла чуть ли не теория заговора? Или это отголовски каких-то прошлых SEO-войн?


ЕМ>Как тогда поисковики обновляют свои индексы? Тупой периодической загрузкой полных страниц, плюс по результатам обновления sitemap?


А есть ли польза от этого хедера? Мне кажется, сейчас, когда почти все страницы генерируются динамически, смысл в нем теряется, и поисковики это понимают. Есть ли исследования на эту тему?
Re[2]: HTTP: last-modified, if-modified-since
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 19.01.20 14:28
Оценка:
Здравствуйте, Михaил, Вы писали:

М>сейчас, когда почти все страницы генерируются динамически, смысл в нем теряется


Смысл может теряться не от динамической генерации, как таковой, а от внесения уникального контента при каждой генерации. Когда страница в реальном времени отображает данные с других сервекров — понятное дело, нет смысла ее кэшировать на сколько-нибудь заметное время. А если страница просто собирается скриптом из фрагментов, расположенных в БД (в том числе обычных файлах), то у каждого такого фрагмента всегда есть временнАя метка. Пока еще не на каждой странице крутятся рекламные баннеры.
Re[2]: HTTP: last-modified, if-modified-since
От: vsb Казахстан  
Дата: 19.01.20 14:49
Оценка:
Здравствуйте, Михaил, Вы писали:

М>А есть ли польза от этого хедера? Мне кажется, сейчас, когда почти все страницы генерируются динамически, смысл в нем теряется, и поисковики это понимают. Есть ли исследования на эту тему?


Браузер включает этот заголовок, если страница у него в кеше. Т.е. во-первых сервер может экономить ресурсы на генерации страницы/чтении её с диска, во-вторых сервер может экономить ресурсы трафика, не передавая тело ответа, в-третьих клиент экономит трафик, в-четвёртых клиент быстрей получает ответ.

В идеале, конечно, лучше отдавать неизменяемый ресурс, чтобы браузер вообще запросов не делал, а всегда брал из кеша. Но не всегда это возможно.
Re[3]: HTTP: last-modified, if-modified-since
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.01.20 07:56
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

М>>сейчас, когда почти все страницы генерируются динамически, смысл в нем теряется


ЕМ>Смысл может теряться не от динамической генерации, как таковой, а от внесения уникального контента при каждой генерации. Когда страница в реальном времени отображает данные с других сервекров — понятное дело, нет смысла ее кэшировать на сколько-нибудь заметное время. А если страница просто собирается скриптом из фрагментов, расположенных в БД (в том числе обычных файлах), то у каждого такого фрагмента всегда есть временнАя метка. Пока еще не на каждой странице крутятся рекламные баннеры.


Но ориентируются-то на них. Какой смысл ориентироваться на стиль 90-х, если сейчас чуть более, чем каждый заказчик хочет динамику с выдачей всех этих "сейчас читают", модификацией под каждого пользователя отдельно и т.д.? Он и просто некэширование будет ставить, потому что URL одинаков, а пользователи разные.
Это, если что, не моя позиция, а рыночный запрос пользователей движков.

Вот когда начинается удар нагрузки — они могут часть выносить в статику.
The God is real, unless declared integer.
Re[4]: HTTP: last-modified, if-modified-since
От: Mr.Delphist  
Дата: 21.01.20 19:19
Оценка:
Здравствуйте, netch80, Вы писали:

N>Но ориентируются-то на них. Какой смысл ориентироваться на стиль 90-х, если сейчас чуть более, чем каждый заказчик хочет динамику с выдачей всех этих "сейчас читают", модификацией под каждого пользователя отдельно и т.д.? Он и просто некэширование будет ставить, потому что URL одинаков, а пользователи разные.

N>Это, если что, не моя позиция, а рыночный запрос пользователей движков.

N>Вот когда начинается удар нагрузки — они могут часть выносить в статику.


Когда начнётся удар нагрузки, будет использоваться eventual consistency. Т.е. никуда далее текущего нода запрос не выборку отправляется, просто суммируется с агрегатами от соседних нодов, актуальность которых — час или два назад.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.