Понимать HTTP-заголовок If-Modified-Since
Я смотрю на библиотеку кэширования, которая пытается использовать If-Modified-Since
заголовок объекта запроса. Проблема в том, что этот заголовок никогда не устанавливается, он всегда пустой, что имеет смысл для меня, чтобы увидеть, как это ЗАПРОС.
Как вы можете заставить запрос иметь If-Modified-Since
заголовок? Или я далеко за то, что это делает.
Вот функция, о которой я говорю.
public function isNotModified(Request $request)
{
$lastModified = $request->headers->get('If-Modified-Since');
$notModified = false;
if ($etags = $request->getEtags()) {
$notModified = (in_array($this->getEtag(), $etags) || in_array('*', $etags)) && (!$lastModified || $this->headers->get('Last-Modified') == $lastModified);
} elseif ($lastModified) {
$notModified = $lastModified == $this->headers->get('Last-Modified');
}
if ($notModified) {
$this->setNotModified();
}
return $notModified;
}
2 ответа
Запрос с If-Modified-Since
имеет смысл, только если у клиента уже есть ресурс, полученный вместе с ответом, который имеет Last-Modified
заголовок в сочетании с заголовками, которые позволяют кэширование браузера как Cache-Control
и / или Pragma
значение, содержащее public
,
Кроме того, я заметил, что некоторые браузеры не включают If-Modified-Since
когда первоначальный ответ также содержал ETag
заголовок. Браузер вместо этого будет использовать If-None-Match
чтобы проверить это.
Смотрите также:
Сначала вы должны убедиться, что первоначальный ответ кэшируется в первую очередь (я ответил на это в другом, связанном с этим вопросе).
Попробуйте установить следующие поля:
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Expires: -1
Cache-Control: must-revalidate, private
Last-Modified
нужен как валидатор (не отправлятьETag
если вы хотите проверить наIf-Modified-Since
)Expires -1
говорит о том, что ресурс устарел и всегда должен быть проверенCache-Control
не должен включать в себя ни кеш, ни магазин
Когда вы отправляете эти заголовки на начальном HTTP/200
В ответ на последующие запросы браузер должен отправлять условные запросы, включающие If-Modified-Since
заголовок.