Сегодня поговорим об 304 ответе сервера. Для чего он нужен, как его можно реализовать.
Назначение
Редко можно встретить, чтобы кто-то, где-то, когда-то говорил об этом. На самом деле 304 ответ это хорошо. Он говорит о том, что страница сайта не изменялась. Получая данный заголовок, браузер или поисковый робот, получает команду, что заново загружать страницу с сервера не нужно.
Это способствует повышению скорости отдачи страницы или индексации в поисковиках. Потому что получая данный ответ, бразуер или поисковик понимают, что страница не изменилась.
Браузер отдаст страницу из памяти не тратя время на лишний запрос к серверу, а поисковый робот просто напросто пройдет мимо этой страницы и будет индексировать другие страницы. Не забываем, ведь боты имеют ограничения на обход одного сайта за раз. Но не только "клиент" получает выгоду, но и сервер, потому что количество запросов к нему снижается в разы.
Как реализовать
Вообще каждая cms или фреймворк имеет такую функцию. Необходимо просто установить какой-нибудь модуль или компонент.
function lastModified($gmdate) {
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']) or isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$IfModifiedSince = strtotime(substr(($_ENV['HTTP_IF_MODIFIED_SINCE'] ? $_ENV['HTTP_IF_MODIFIED_SINCE'] : $_SERVER['HTTP_IF_MODIFIED_SINCE']), 5));
}
if ($IfModifiedSince && $IfModifiedSince >= strtotime($gmdate)) {
header($_SERVER['SERVER_PROTOCOL'].' 304 Not Modified');
exit;
}
header('Last-Modified: '.$gmdate);
}
Выше реализация на чистом php. Тут мы проверяем есть ли переменная в окружении, содержащяя в себе время последнего изменения страницы. Такой код используется в разделе новости одного из рабочих сайтов. Как можно увидеть, страницы отдаются мгновенно.
Например, на yii2 можно реализовать следующим образом:
public function behaviors()
{
return [
[
'class' => 'yii\filters\HttpCache',
'only' => ['index'],
'lastModified' => function ($action, $params) {
$q = new \yii\db\Query();
return $q->from('post')->max('updated_at');
},
],
];
}
Пропишем поведение(behaviors) вернем класс, на какой action распространяется ответ и callback. В callback запрос к базе, получаем самое последнее время изменения записи в таблице, в нашем случае post.
Итог
Подытоживаем, 304 ответ позволяет:
- сэкономить ресурсы сервера
- увеличить скорость отдачи страницы
- ускорить индексацию поисковиками
И поэтому 304 ответ сервера должен быть обязательным на сайте, наравне с 200 и 404.
Материал подготовлен автором @zheev
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
midnight, ruslandis, tasha, tristamoff, vadbars, kotik, olga-olga, semasping, cergey-p, ladyzarulem, arystarch, osincevata, oksana0407, igor66, lenutsa, vpervye1, yurchello, amelina.elena, lushaya, soroka, hellen-g, victorskaz, kertar, dim447, ifingramota, oksi-m, liseykina, zhenek, magformers, zir0chka, kanalex, kr-alexey, katarinka, katherina, andrzhej, anandasurya, vitalist
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:
апнул...
Апнул бы, да не могу, пишет мне, типа авторитета не хватает))
Да ладно?) Можете скрин показать?
Могу, нет не смог в это сообщение вставить скрин, но вот, то что мне пишет:
Voting weight is too small, please accumulate more voting power or steem power.
А, так это батарейка просто у вас села, ни один пост не апнуть. Ждите пока восстановится.
В шапке сайта показан процент батарейки.
Скрин можно на любой хостинг картинок закинуть и просто ссылку поставить - она превратится в картинку
Ок. Спасибо за разъяснения. Буду потехоньку разбираться)