Нужно ли снова отправлять ETag с заголовком 304 Not Modified?
Я играл с PHP, использовал ETags, IF_NONE_MATCH и т. Д., Когда произошла странная вещь. Я написал код ниже, который проверяет IF_NONE_MATCH. Если он соответствует моему ETag, я отправляю заголовок ответа 304. Если нет, я отправляю другим заголовкам указание браузеру кэшировать страницу и мой ETag вместе с ними. Я ожидал получить страницу один раз, а потом все время получать 304. Вместо этого я получаю страницу один раз, затем 304, затем страницу, затем 304 и т. Д. Когда я проверял представление заголовка Chrome, я увидел, что если я не установил ETag снова в коде 304, он не отправьте его обратно в заголовки запроса в следующий раз, когда я получу страницу. Это нормальное поведение или просто Chrome? Я делаю что-то неправильно?
Вот код:
<?php
$etag = '89453fo245tyu5o423ty5349gu0p34';
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
$_SERVER['HTTP_IF_NONE_MATCH'] == $etag) {
header('', true, 304);
} else {
header('Expires: Fri, 06 Apr 2013 23:59:59 03:00 GMT');
header('Pragma: cache');
header('Cache-Control: public, must-revalidate, max-age=0');
header('ETag: ' . $etag);
echo 'new page';
}
1 ответ
Я думаю, что проблема в вашем вызове заголовка. Используйте правильный заголовок вызова, как указано в этом ответе, и все должно быть хорошо:
header('HTTP/1.1 304 Not Modified');
Также помните, что если вы нажмете F5, чтобы обновить страницу, возможно, ваш браузер проигнорирует кеш и перейдет прямо к веб-серверу. Чтобы проверить, я бы добавил ссылку на ту же страницу или просто щелкнул в адресной строке браузера и нажал ввод.