Добрый день всем!
В общем проблема такая. Сервер отдает Last modified дату и время последнего сброса кеша... для всех страниц. Как корректно настроить, чтобы в заголовке отдавал реальную дату модификации?
И еще, как откорректировать такой ответ: expires: Sun, 19 Nov 1978 05:00:00 GMT
Drupal 9.5.11
Комментарии
Реальную дату модификации чего? Если страница содержит ноду, пару вьюх и футер, в котором позавчера поменялся телефон компании?
Ноды конечно, ведь это адрес ноды, все остальные объекты тут лишь вставные.
У меня сейчас на всех 15 тысячах страниц Last-modified кеша, это не правильно.
Это смотрели?
https://drupal-coder.ru/blog/pravilnye-otvety-servera-dlya-uskoreniya-in...
https://www.drupal.org/project/lastmodified_since
Если честно не помню, но возможно это тоже содержит решение https://www.drupal.org/project/http_response_headers
Увы... ничего из выше перечисленного не помогает. Более того модуля lastmodified_since больше нет. Вернее если покопаться можно скачать для D8 ...путем нехитрых манипуляций я его на D9 запустил. И он работает, но все, что он сделал, это стал отдавать 304 ...но сравнивает он все равно со временем кеша.
Как отдать дату и время последнего редактирования ноды в Last Modified, а не кеша...
На днях добавлял Last Modified для Drupal 8.7. Может поможет.
В своем модуле:
Файл: MY_MODULE.services.yml
class: Drupal\MY_MODULE\EventSubscriber\Subscriber
arguments: ['@config.factory']
tags:
- { name: event_subscriber }
Файл: src/EventSubscriber/Subscriber.php
<?php
/**
// надо посмотреть в объекте $response, через него можно получить ноду и нужную дату.
// Добавляем заголовок
namespace Drupal\MY_MODULE\EventSubscriber;
use
Symfony\Component\HttpKernel\KernelEvents;use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class
Subscriber implements EventSubscriberInterface {* Executes actions on the respose event.
*
* @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
* Filter Response Event object.
*/
public function onKernelResponse(FilterResponseEvent $event) {
$response = $event->getResponse();
// вместо time() будет нужная вам дата
$time = time();// Форматируем дату
$lastModifiedDate = date('D, d M Y G:i:s', $time);
$response->headers->set('Last-Modified', $lastModifiedDate . ' GMT');
}
public static function
getSubscribedEvents() {// -10 это приоритет вызова, с ним можно поиграть при надобности
$events[KernelEvents::RESPONSE][] = ['onKernelResponse', -10];
return $events;
}
}
?>Сорян, что код разъехался, чет не смог подправить)