2015-11-11 4 views
0

У меня есть сайт с несколькими страницами (например, 1.htm и 2.htm) и некоторые файлы сценариев, ссылки на которые приведены на этой странице.Apache возвращает старый Etag и LastModified

Мой файл .htaccess содержит этот код:

FileETag MTime Size 
<ifModule mod_expires.c> 
    ExpiresActive On 
    ExpiresByType text/html "access plus 1 day" 
    ExpiresByType text/css "access plus 1 week" 
    ExpiresByType text/javascript "access plus 1 week" 
    ExpiresByType application/javascript "access plus 1 week" 
    ExpiresByType application/x-javascript "access plus 1 week" 
    ExpiresByType image/gif "access plus 1 year" 
    ExpiresByType image/jpeg "access plus 1 year" 
    ExpiresByType image/png "access plus 1 year" 
</ifModule> 

я посещаю страницу 1.HTM, а затем изменить файл сценария и перейдите на страницу 2.htm. Я ожидаю, что Apache вернет новые значения Etag/LastModified, и файл сценария будет обновлен. Но он возвращает старые значения. Что не так?

Когда я обновляю страницу, я получаю новые значения Etag/LastModified.

ответ

1

Пункт кеширования состоит в том, что вам не нужно снова загружать файл за указанное время.

Так эта линия:

ExpiresByType text/html "access plus 1 day" 

Значит, если вы посещаете страницу в тот же день, то страница будет обслуживаться из кэша, а не с сервера. Поэтому вы не получите новую страницу или новые заголовки Etag/Expiry. Если вы загружаете инструменты разработчика в Chrome, например, вы увидите, что страница загружается «из кеша».

Если он все еще находится в кеше, и вы обновляете его, браузер дважды проверяет его с сервером, если файл изменился, возвращая 301, если это не так, и перезагрузите страницу, если она изменилась (включая новые заголовки). Но при обычной загрузке страницы он даже не делает этого с сервером и не работает прямо из вашего кеша. Так оно и должно работать.

Таким образом, при настройке посетителей вашего сайта все еще можно увидеть старую версию вашей страницы на срок до 1 дня после ее изменения.

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

Btw, как в сторону, вы не должны использовать Etags с Apache, поскольку они не работают, когда также используют gzip. Подробнее здесь: https://www.tunetheweb.com/performance/http-performance-headers/etag/

+0

Как я могу добавить _must-revalidate_ attrubute только для некоторых файлов, а для других оставить правило 'ExpiresByType text/html" access plus 1 day "' – adrenalin

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