Понимать заголовок HTTP If-Modified-Since - PullRequest
14 голосов
/ 22 февраля 2011

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

24 голосов
/ 22 февраля 2011

Запрос с If-Modified-Since имеет смысл только в том случае, если у клиента уже есть ресурс, полученный вместе с ответом, имеющим заголовок Last-Modified в сочетании с заголовками, которыеразрешить кеширование в браузере, например Cache-Control и / или Pragma значение, содержащее public.

Кроме того, я заметил, что некоторые браузеры не включаютIf-Modified-Since, когда исходный ответ также содержал заголовок ETag.Вместо этого браузер будет использовать If-None-Match для его проверки.

См. Также:

11 голосов
/ 23 февраля 2011

Сначала вы должны убедиться, что первоначальный ответ кэшируется в первую очередь (я ответил , это в другом связанном вопросе.

Попробуйте установить следующие поля:

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.

...