Перейти к содержимому

Реферальная программа Мегаплана


Правильный заголовок Last-Modified

#1 sergei299

sergei299
  • Пользователь
  • 2 сообщений
  • Репутация: 1
1

Отправлено 21 Июнь 2013 - 10:47

(Конкурсная тема, конкурс "Web-ошибки")

Свой первый сайт я сделал самописный на инклюдах и прочитав советы Яндеса:

Следите, чтобы все нужные страницы сайта отдавали код 200 OK.
Следите за корректностью http-заголовков. В частности, важно, содержание ответа, который сервер отдает на запрос «if-modified-since». Заголовок Last-Modified должен отдавать корректную дату последнего изменения документа.

долгое время искал способ решения этой проблемы.

Реализовать все это получилось вставив этот код <!--?php include $_SERVER['DOCUMENT_ROOT'].'/is-modified.php' ; ?--> перед тегом на каждой странице и закинув на сайта файл is-modified.php со следующим содержимым
<!--?php
$failo=substr($SERVER_NAME.$SCRIPT_FILENAME,strlen($SERVER_NAME));
$LastModified_unix=filemtime($failo);
$LastModified = gmdate('D, d M Y H:i:s',filemtime(substr($SERVER_NAME.$SCRIPT_FILENAME,strlen($SERVER_NAME)))).' GMT';
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))	
  $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))	
$IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($IfModifiedSince && $IfModifiedSince -->= $LastModified_unix)
{
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');	
exit;
}
header('Last-Modified: '. $LastModified);
//компрессия на сервере
ob_start("ob_gzhandler");
?>

Для сайтов на Вордпресс я делаю это при помощи плагина wp-super-cache поставив галочку в настройках возле пункта Ошибка 304

Думаю данная информация может пригодится начинающим Вебмастерам

При поддержке: Fozzy - эксклюзивный спонсор конкурса на Masterwebs. На хостинге Fozzy ваш сайт будет работать до 3-х раз быстрее, а отзывчивая поддержка поможет в любой трудной ситуации. Попробуйте быстрый хостинг Fozzy бесплатно в течение 7 дней!
Изображение

 

 

  • 1

#2 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 21 Июнь 2013 - 16:02

Я как-то тоже задавался этим вопросом, все вроде сделал, но не учел кое-чего.
Когда пользователь запрашивает страницу, я брал значения из БД, сверял и все вроде ок, но загвоздка в авторизации.
Если пользователь впервые зашел на страницу без авторизации, то браузер закеширует форму логин/пасс, а пользователь потом авторизуется, зайдет на страницу, а ему браузер из кэша с формой авторизации.
Как быть не знаю.
  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#3 Sergey_on

Sergey_on
  • Пользователь
  • 8 сообщений
  • Репутация: 3

Отправлено 02 Июль 2013 - 18:37

$LastModified_unix=filemtime($failo);
$LastModified = gmdate('D, d M Y H:i:s',filemtime(substr($SERVER_NAME.$SCRIPT_FILENAME,strlen($SERVER_NAME)))).' GMT';


А я в одной из своих недавних статей как раз писал о том, что не рекомендую использовать время последнего изменения файла для указания даты последнего изменения страницы, так как многие хостинг провайдеры не выдают корректное время изменения файла, а потому к нему лучше не привязываться. Кстати, вот моя статья об этом: заголовки Last-Modified и if-modified-since.
  • 0


Оформление форума – IPBSkins.ru