if-modified-since и кеш

M
На сайте с 15.03.2012
Offline
128
239

Для удовлетворения пожеланий ПС реализовал отдачу 304 Not Modified в ответ на if-modified-since и столкнулся с проблемой:

Например находимся на странице "контакты". У этой страницы есть last-modified, хранящийся в БД, который мы сравниваем с if-modified-since. Все хорошо, яндекс получает 304 при повторном запросе содержимого страницы. А проблема в том, что браузеры кешируют страницу и тоже получают 304. А ведь на странице могут быть алерты какие нибудь, ещё что-то доступное только пользователю, и он этого не увидит из-за кеша.

как этого избежать?

Пробовал

header('Expires: Thu, 01-Jan-70 00:00:01 GMT');

header('Cache-Control: no-store, no-cache, must-revalidate');

header('Cache-Control: post-check=0, pre-check=0', false);

header('Pragma: no-cache');

не помогло.

L
На сайте с 07.12.2007
Offline
351
#1
Moltisanti:
как этого избежать?

Никак, кэш не стороне клиента одинаково работает и для ПС и для браузера.

Если на странице появились "всякие алерты" - считается что страница изменилась и надо отдавать не 304 Not Modified, а 200 OK и саму страницу.

ИлиЮ как вариант, подгружать алерты на ajax - он будет срабатывать даже из кэша, если к запрашиваемому url добавлять Math.random() на явасрипте.

Кроме того, некоторые браузеры(например, FF) тупо игнорируют всякие хеадеры типа header('Cache-Control: no-store, no-cache, must-revalidate') и поднимают страницу из кэша.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий