2015-04-10 2 views
3

При оптимизации кэширования на нашем сайте я заметил, что на наш сайт отправлено множество if-none-match -requests. Насколько я понимаю кэширование, это не должно быть так, если кеш остается в силе.Когда отправляется запрос «если нет ответа»?

Один конкретный запрос генерирует следующий response-header:

HTTP/1.1 200 OK 
Cache-Control: public, max-age=25920000 
Transfer-Encoding: chunked 
Content-Type: application/javascript; charset=utf-8 
Content-Encoding: gzip 
Expires: Thu, 04 Feb 2016 17:20:09 GMT 
Last-Modified: Mon, 01 Jan 2001 23:00:00 GMT 
ETag: W/"0" 
Vary: Accept-Encoding 
Server: Microsoft-IIS/8.5 
X-AspNet-Version: 4.0.30319 
Date: Fri, 10 Apr 2015 16:20:09 GMT 

Как вы можете видеть, кэш должен быть действителен в течение 300 дней. Как я понимаю, браузер должен использовать свой кеш непосредственно в течение этого периода. Только после того, как этот период закончился, он должен выдать запрос с заголовком if-none-match. Но браузеры, похоже, игнорируют это и отправляют этот if-none-match -request каждый раз, когда страница загружается только для получения 304-response ("Not Modified").

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

+0

Не знаю, но не заменил бы теги HTTP/1.0 'Cache-Control: max-age = 600'? Помогите? – maaartinus

+0

Можете ли вы рассказать примерно, сколько таких запросов вы видите? Может ли это быть у клиентов, перезагружающих страницу? Это может привести к тому, что некоторые браузеры будут переоценивать ресурсы. –

ответ

0

Да, в то время как кеш свежий, браузер должен использовать локальную копию без повторной аттестации. Однако это не гарантируется. Например, когда пользователи используют браузеры Refresh button, все равно запросы на сервер происхождения.

Существует расширение Cache-Control: immutable, max-age=…, которое сообщает браузерам, что вы действительно имеете в виду, что они должны использовать кешированный ресурс, не обращаясь к серверу.

Смежные вопросы