X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Просветите: last-modified и expires
ShowPrint
ShowPrint
Topic Starter сообщение 23.4.2015, 2:21; Ответить: ShowPrint
Сообщение #1


Исходные данные: есть работающий сайт на HTML 4.01 Transitional, написанный на php, в котором написал следующий код для упомянутых meta-тегов:

$_PhpScriptName = substr( $_SERVER['SCRIPT_NAME'], strrpos( $_SERVER['SCRIPT_NAME'], "/" )+1, -4 );
$_LastModified = filemtime($_PhpScriptName.".php");
echo "<meta http-equiv='expires' content='".gmdate( 'D, d M Y H:i:s \G\M\T', $_LastModified )."'>
<meta http-equiv='last-modified' content='".gmdate( 'D, d M Y H:i:s \G\M\T', $_LastModified )."'>";

По моей задумке этот код определяет имя выполняющегося скрипта, определяет дату его закачки на сервер (по идее это дата последнего изменения) и проставляет эту дату в качестве значений для соответствующих meta. То есть реальная честная дата произведенных изменений. Все работает как часы.
 

Вопросов три:

1. Вставляю этот код в верстку новой версии сайта, который делаю на html5. Все отрабатывает также чётко, но!!! Валидатор грязно ругается:
Bad value last-modified for attribute http-equiv on element meta.

    <meta http-equiv='last-modified' content='Wed, 22 Apr 2015 21:04:37 GMT'>


Почему ругается - у меня нет никаких идей, никакая буковка и кавычка поменяться или потеряться не могла - банальный copy-paste... Ниччё не понимаю...  :angry:  У кого-нибудь есть предположения которые стоит проверить? 

 

2. Правильно ли я делаю что проставляю в эти 2 мета одинаковую дату? Ведь фразу Expires -Устанавливает дату и время, после которой информация в документе будет считаться устаревшей можно понимать двояко:

а) если бот скушал страничку до указанной даты, то для него готово новое блюдо и наступило время очередного пищеприема - тогда совпадение дат является верным (так думал все время)

б) сегодня пришла мысль что там может стоять  и предстоящая дата и сочетание этих тегов может восприниматься следующим образом: изменения скушал, теперь приходи тогда-то (например через неделю)

в) или все-таки Expires служит не для ботов, а для клиентских браузеров для управления кешированием?

Какую все-таки дату правильно проставлять в Expires?

 

3. Пытаясь разобраться в этом вопросе самостоятельно, анализируя некоторые "топовые" ресурсы, был несказанно удивлен по той причине что у половины изученных мною кодов эти теги вообще отсутствуют, а использование Expires вообще сводится к 1 из 10 ресурсов... Удивление было вызвано тем, что не помню в каком раздела, то точно помню что в Я-руководстве по созданию качественных сайтов был сделан отдельный акцент на наличие и правильность отдачи last-modified, на то что отдача заголовка быть обязательно настроена. При этом в Я-топе именно сайты которые не соответствуют этим рекомендациям. Так нужны ли эти теги вообще, тем более что после каждого внесения изменений я генерю реальный sitemap.xml который прописан и в Я и в Г. Может достаточно "одного из" вариантов?

Если относительно Expires  правильным является ответ 2-в, то нужен ли он вообще, если я задаю время кеширования в htaccess (полгода на картинки, неделю на JS и CSS и 3 дня на сам контент)?

0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 28.4.2015, 19:27; Ответить: ixman
Сообщение #2


Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ShowPrint
ShowPrint
Topic Starter сообщение 28.4.2015, 20:17; Ответить: ShowPrint
Сообщение #3


(Ixman @ 28.4.2015, 21:27) *
должна работать функция header()
 Если бы она еще сама знала, что она "должна"...  :D
Попробую еще побороться с ней пару ночей, ну а если "она меня" - придется заходить через htaccess... Как раз к тому времени у меня будет какая-никакая статистика по увеличению нагрузки на сервер и можно будет решить оставлять ли статику на апаче...
Спасибо пребольшучее за "кусок" - очень полезный, обязательно почитаю, уже некоторые новые моменты для себя увидел, даже без тщательного разбора, но и вопросы появились, например с какой целью отключается Etag и Last-Modified в конце "куска"? Ведь если я правильно понимаю в html5 они служат для одинаковых целей... По "человечьей" логике если нет данных о дате изменения файлов, то надо бы их перегрузить, чтоб они точно были актуальными,даже не смотря на то, что файлы кешированы... Можно конечно к этому вопросу подходить с другим рассуждением типа: если неизвестна дата изменения, то и грузить не стоит - но это как-то противоречит моему совковому воспитанию...

Хочется побороть все-таки header(), так как используя его можно проверить даты всех include-файлов и какой-бы кусок не поправил - отдавать действительно актуальную дату изменения...

Еще бы понять саму систему: если код динамически генерируется каждый раз при отдаче, то по идее last-modified должен соответствовать времени генерации страницы и Etag должен быть каждый раз новый, или Etag это прототип "контрольной суммы" и вне зависимости от времени генерации страницы он один и тот же всегда (при условии отсутствия изменений в содержимом) :unsure:

"Чем дальше в лес, тем третий лишний"... (с)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 28.4.2015, 20:24; Ответить: ixman
Сообщение #4


Вообще я отключил эти заголовки ради эксперимента, ибо натолкнулся на одну мысль

Механизм ETag (Entity Tag) предназначен для обнаружения новых версий запрошенных файлов. Когда сервер отсылает клиенту файл, он добавляет заголовок ETag, в который записывает хеш отправляемого файла.
Клиент же, при повторном запросе, добавляет заголовок If-None-Match, значение которого равно хешу файла в кеше. Если значение совпадают, то сервер возвращает ответ HTTP/1.1 304 Not Modified, а если не совпадают, тогда возвращает новую версию файла.

Таким образом, удаление заголовка ETag в ответах сервера отключает этот механизм. Что заставляет кеш клиента использовать только значения Expires и Cache-Control (если вы не используете Expires и Cache-Control не удаляйте ETag!). Выигрыш такого подхода в том, что между клиентом и сервером отпадает надобность обмениваться запросами проверки новых версий (If-None-Match и 304 Not Modified).

Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Rexxar
Rexxar
сообщение 28.4.2015, 21:45; Ответить: Rexxar
Сообщение #5


Валидатору не нравится само значение, но такая ситуация возможна при любом значение. Давно не видел, чтобы эту функцию использовали, просто забудьте ее.   
http://stackoverflow.com/questions/9655526...meta-validation

Вот люди тут сказали, что поисковики и даже авторские мета уже не считывают, типа они устарели. Правильней конечно узнавать у представителей ПС. Я пару раз узнавал у платонов, почти все эти мета данные они не учитывают. Заголовок новости, описание и под вопросом ключи, но вот последняя модификация тоже может не учитываться. В любом случае в них нет необходимости, поэтому советую просто забыть про них. 
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ShowPrint
ShowPrint
Topic Starter сообщение 28.4.2015, 23:16; Ответить: ShowPrint
Сообщение #6


Rexxar, спасибо за ссылку и Ваше мнение... Видимо я уже безнадёжно устарел... :unsure:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ShowPrint
ShowPrint
Topic Starter сообщение 29.4.2015, 0:15; Ответить: ShowPrint
Сообщение #7


(Ixman @ 28.4.2015, 22:24) *
обмениваться запросами проверки новых версий

Ixman, логика понятна, если не с чем сравнивать, то пропадает смысл сравнения и экономится время и ресурсы... Разумно с одной стороны, а если версия действительно новая? ждать окончания срока кеширования?

И еще вопрос: хочется разобраться, вот этим куском:

<filesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=2592000, private, must-revalidate"
</filesMatch>

Код "прочел", понял, кешируем на месяц, но при каждом обращении проверяем актуальность. хочется в голове понимания как определяется актуальность php-скрипта...
По сути ведь php генерит "виртуальную" страницу, которая нигде больше не существует кроме как в браузере юзверя или памяти сервера... В клиентском кеше хранится информация об имени скрипта и хеше гренерированного им кода? При обращении страница герерируется на сервере, сравниваются клиентский и серверный хеши и, в случае различий, страница сгенерённая на сервере грузится клиенту? Ведь страница сгенеренная php-скриптом заведомо более свежая, как только что рождённая, т.е. при отсутствии last-modified и сравнивать-то становится нечего? за исключением математических параметров (размера, хеш-кода). То есть если на моей странице имеет место "динамическая" картинка вставляемая из набора случайным образом, то и хеш всегда будет разным, а значит и кешировать нет смысла, потому как страница будет все равно грузиться почти каждый раз заново?

Ув. форумчане, прошу прощения за то что я такой "тупой, еще тупее", но хочется в голове разложить всё по полочкам, на свои места...

Сообщение отредактировал ShowPrint - 29.4.2015, 0:16
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 29.4.2015, 13:41; Ответить: ixman
Сообщение #8


Я не силён в глубинах алгоритмов и механизмов кеширования, но страницы генерируемые php скриптом отлично кешируются, иногда даже возникают проблемы. То есть инфа, выводимая скриптом, более новая просто не выводится, из-за того, что html снимок страницы находится в кеше. По сути в этом коде указан php для кеширования страниц с расширением php, ибо много не обновляемых страниц
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ShowPrint
ShowPrint
Topic Starter сообщение 29.4.2015, 13:58; Ответить: ShowPrint
Сообщение #9


Спасибо Ixman, глубинным дайвингом могу заняться и сам в свободное время, на данном этапе ограничусь информацией о том, что страницы кешируются. Пожалую настрою кеширование (в т.ч. Expires через htaccess) и воспользуюсь советом Rexxar - вообще удалю эти теги...


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 18.4.2024, 18:43
Дизайн