Обновить страницу используя кеш - PullRequest
2 голосов
/ 28 июня 2011

Я пытаюсь обновить страницу, но ХОЧУ использовать кеш и не могу понять, как это сделать. Есть две ситуации:

  • Если я щелкну в строке URL и нажму клавишу ввода (или зайду на страницу из другого места), она перезагрузит страницу / изображения из кэша. ВЕЛИКИЙ!

  • Если я нажимаю кнопку обновления или использую Javascript для обновления страницы, она снова захватывает все изображения и занимает бесконечно долго. НЕ БОЛЬШОЙ!

Я пробовал: top.location.reload(false); и top.location.reload(true); (я отправляю это из iFrame), и ни один из них не использовал кеш. Я избегаю использования location, чтобы он не попадал в историю браузера дважды.

Вопрос : Как перезагрузить страницу, используя кэшированные изображения? Есть ли другая функция javascript или это проблема mod_expires?

Спасибо за любую помощь заранее!

РЕДАКТИРОВАТЬ: (информация из Chrome: инструменты разработчика)

  • При переходе на страницу я получаю «Из кэша» для всех изображений
  • При обновлении страницы я получаю «304 - Не изменено» для всех изображений (и для загрузки каждого требуется время)

РЕДАКТИРОВАТЬ 2: (Заголовки из изображения, сафари: инструменты разработчика)

Javascript: top.location.reload (false); (Без кеша!)

Status Code:304 Not Modified

Request Headers
Cache-Control:max-age=0
If-Modified-Since:Tue, 28 Jun 2011 07:13:17 GMT
If-None-Match:"104684ae-a7d-66e41d40"
Referer:http://getdirectus.com/dev/media.php
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1

Response Headers
Cache-Control:max-age=157680000
Connection:Keep-Alive
Date:Tue, 28 Jun 2011 16:56:50 GMT
Etag:"104684ae-a7d-66e41d40"
Expires:Sun, 26 Jun 2016 16:56:50 GMT
Keep-Alive:timeout=5, max=94
Server:Apache/2.0.54

Переход на страницу: (использует кэш)

Status Code:200 OK

Response Headers**
Accept-Ranges:bytes
Cache-Control:max-age=157680000
Connection:Keep-Alive
Content-Length:2685
Content-Type:image/jpeg
Date:Tue, 28 Jun 2011 16:54:20 GMT
Etag:"104684ae-a7d-66e41d40"
Expires:Sun, 26 Jun 2016 16:54:20 GMT
Keep-Alive:timeout=5, max=99
Last-Modified:Tue, 28 Jun 2011 07:13:17 GMT
Server:Apache/2.0.54

Ответы [ 6 ]

5 голосов
/ 28 июня 2011

Документация для window.location.reload( false ); говорит, что она будет загружаться из кэша. Если этого не происходит, возможно, вы видите ошибку браузера. Посмотрите, сможете ли вы повторить проблему в другом браузере.

РЕДАКТИРОВАТЬ (для редактирования): вы видите это поведение, потому что в будущем у вас не установлен заголовок Expires Вам нужно будет добавить заголовок Expires в Apache .

1 голос
/ 06 сентября 2013
window.location.href = window.location.href;

Если местоположение содержит #, обязательно удалите его перед настройкой href.

0 голосов
/ 23 апреля 2013

Ваш второй запрос был инициирован путем обновления страницы вручную. После этого браузер отправляет дополнительный заголовок cache-control:max-age=0 вместе с запросом. Это откуда 304 (не модифицированный).

Если вы перемещаетесь по сайту (используя ссылки), браузер продолжит использовать свой кеш.

0 голосов
/ 28 июня 2011

Здесь нужно учесть две разные вещи:

1: запрос ... браузер -> сервер

2: ответ ... сервер -> браузер

Когда вы обновляете страницу, вы не можете обойти браузер, запрашивая ресурсы страницы на сервере.

Что вы можете сделать, это убедиться, что сервер отправляет минимальный ответ.

Лучший способ добиться этого - использовать etags в заголовках ваших ответов. Таким образом, браузер отправит на сервер запрос if-none-match и получит ответ 304 Nothing changed, если ничего не было изменено.

0 голосов
/ 28 июня 2011

Используя этот сайт , я получил только зеленое изображение с location.refresh(true);. С location.refresh(); или location.refresh(false); я получил красное изображение. Работаю хорошо, наверное.

0 голосов
/ 28 июня 2011

Если вы хотите включить кэширование на клиенте, не забудьте отправить Expire заголовки, например, с mod_expires

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...