Понять if-Modified-Since HTTP Header

Я просматриваю библиотеку кэширования, которая пытается использовать заголовок 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; } 

    Запрос с 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 не должен включать no-cache или no-store

    Когда вы отправляете эти заголовки на исходный ответ HTTP/200 , при последующих запросах браузер должен отправлять условные запросы, содержащие заголовок If-Modified-Since .