Что должен возвращать Last-Modified/If-Modified-Since?

MIKLFIRM
На сайте с 13.02.2010
Offline
166
1076

Пытаюсь прикрутить связку Last-Modified/If-Modified-Since.

Немного запутался, поправьте меня в теории и практике:

1. Человек заходит на сайт первый раз мы ему возвращаем заголовки:

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Mon, 23 Mar 2015 10:57:07 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.29
Last-Modified: Mon, 23 Mar 2015 10:48:14 GMT
Accept-Ranges: none
Vary: Accept-Encoding
Cache-Control: max-age=0, public
Expires: Mon, 23 Mar 2015 10:57:07 GMT

То есть браузеру мы сказали, что текущее время на серваке 10:57, а последнее изменение было в 10:48. Браузер это запомнил и сохранил страницу в локальный КЕШ.

2. Человек зашел повторно на эту страницу. Так как есть копия в локальном КЕШ то браузер запрашивает If-Modified-Since заголовки, с текущем значением времени и датой, когда был загружен КЕШ.

3. Если дата КЕШа такая же, какая и Last-Modified то сервак отдает 304 Not Modified.

HTTP/1.1 304 Not Modified
Server: nginx/1.6.2
Date: Mon, 23 Mar 2015 10:57:07 GMT
Connection: close
Expires: Mon, 23 Mar 2015 10:57:07 GMT
Cache-Control: max-age=0, public

Что в данном случае означает поле Expires:?

4. Если дата КЕШа более старая, то возвращаем новую страницу, которая становится новым локальным КЕШем.

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: новое время сервера
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.29
Last-Modified: какая-то дата
Accept-Ranges: none
Vary: Accept-Encoding
Cache-Control: max-age=0, public
Expires: Mon, 23 Mar 2015 10:57:07 GMT
Жизнь в стиле IT (http://www.mikl.su) Мои отзывы (http://about-hosting.ru/) о хостингах.
[umka]
На сайте с 25.05.2008
Offline
456
#1

Заголовок Expires всегда говорит, после какой даты контент устаревает и его надо грузить заново.

Лог в помощь!
MIKLFIRM
На сайте с 13.02.2010
Offline
166
#2

Так я же не знаю, когда контент устареет, он устареет, когда обновят страницу.

В данном варианте expires возвращает текущее значение даты - это верная реализация?

[umka]
На сайте с 25.05.2008
Offline
456
#3

Плохо, что не знаете. Вы же владелец своего сайта и должны знать.

Точнее, должны принять решение и установить сроки, в которые контент устаревает.

Если нужно, чтобы контент не кэшировался (устаревал сразу же), можно выдавать в Expires текущую дату.

Тогда теряется смысл от Last-Modified / If-Modified-Since.

MIKLFIRM
На сайте с 13.02.2010
Offline
166
#4
'[umka:
;13601743']Плохо, что не знаете. Вы же владелец своего сайта и должны знать.
Точнее, должны принять решение и установить сроки, в которые контент устаревает.

Если нужно, чтобы контент не кэшировался (устаревал сразу же), можно выдавать в Expires текущую дату.
Тогда теряется смысл от Last-Modified / If-Modified-Since.
'[umka:
;13601743']Плохо, что не знаете. Вы же владелец своего сайта и должны знать.
Точнее, должны принять решение и установить сроки, в которые контент устаревает.

Если нужно, чтобы контент не кэшировался (устаревал сразу же), можно выдавать в Expires текущую дату.
Тогда теряется смысл от Last-Modified / If-Modified-Since.

дык нужно, чтобы контент кешировался и брался из кеша до момента изменения контента на сайте: а откуда я знаю, когда мне нужно что-то поменять станет?

Уважаемый, у меня к Вам два вопроса:

1. Как устанавливается дата Expires?

2. А можно этот заголовок не использовать (Expires), ведь я не знаю, когда я буду править контент, но и чтобы Last-Modified / If-Modified-Since верно отрабатывали?

[umka]
На сайте с 25.05.2008
Offline
456
#5

Дата Expires для статического контента устанавливается дефолтными настройками веб-сервера или в .htaccess.

Expires для динамического контента устанавливается движком сайта.

Можно не использовать Expires. Просто не отдавайте его.

MIKLFIRM
На сайте с 13.02.2010
Offline
166
#6
'[umka:
;13601861']Дата Expires для статического контента устанавливается дефолтными настройками веб-сервера или в .htaccess.
Expires для динамического контента устанавливается движком сайта.

Можно не использовать Expires. Просто не отдавайте его.

А как это сделать?

Qinghua
На сайте с 01.09.2009
Offline
103
#7

Если речь о htaccess, шаблон можно тут взять: https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess

<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# Data interchange
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rdf+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/ld+json "access plus 0 seconds"
ExpiresByType application/schema+json "access plus 0 seconds"
ExpiresByType application/vnd.geo+json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Favicon (cannot be renamed!) and cursor images
ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 week"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
# Manifest files
ExpiresByType application/manifest+json "access plus 1 year"
ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
ExpiresByType text/cache-manifest "access plus 0 seconds"
# Media files
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType image/bmp "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType image/webp "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# Web fonts
# Embedded OpenType (EOT)
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType font/eot "access plus 1 month"
# OpenType
ExpiresByType font/opentype "access plus 1 month"
# TrueType
ExpiresByType application/x-font-ttf "access plus 1 month"
# Web Open Font Format (WOFF) 1.0
ExpiresByType application/font-woff "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType font/woff "access plus 1 month"
# Web Open Font Format (WOFF) 2.0
ExpiresByType application/font-woff2 "access plus 1 month"
# Other
ExpiresByType text/x-cross-domain-policy "access plus 1 week"
</IfModule>

когда меняете статику, ставьте новый урл: script.js?v=2

O
На сайте с 29.05.2008
Offline
195
#8

Заголовок Expires указывает браузеру, когда ему нужно принудительно удалить локальные копии. То-есть, вы можете отдавать, например, дату +1 месяц с момента запроса при каждом запросе. В этом случае, если пользователь запросить страницу через 3 недели, будет загружена локальная копия, а Expires будет продлен еще на месяц. Если запросит позже, чем через месяц, страница будет загружена заново (не из кеша).

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