Как переопределить слишком длинный максимальный возраст 6 месяцев в браузерах, которые уже кэшировали сайт? - PullRequest
1 голос
/ 27 марта 2020

Я получил от клиента информацию о том, что посетители его сайта не получают последнюю версию своего сайта Wordpress. Я отследил это до кеширования браузера. Максимальный возраст установлен на 6 месяцев. И этот параметр является поведением по умолчанию для плагина кэширования SiteGround. После установки плагина кэширования SG Optimizer приведенный ниже код добавляется в файл htaccess. Это устанавливает максимальный возраст и срок годности через шесть месяцев. Как вы можете видеть, он также кэширует html локально. Вот код, который добавляется в htaccess:

# HTTPS forced by SG-Optimizer
<IfModule mod_rewrite.c>
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END HTTPS
# Leverage Browser Caching by SG-Optimizer
<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault                                      "access plus 6 months"
  # CSS
    ExpiresByType text/css                              "access plus 1 year"
  # HTML components (HTCs)
    ExpiresByType text/x-component                      "access plus 2 months"
  # HTML
    ExpiresByType text/html                             "access plus 6 months"
  # JavaScript
    ExpiresByType application/javascript                "access plus 1 year"
    ExpiresByType application/x-javascript              "access plus 1 year"
  # Manifest files
    ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
    ExpiresByType text/cache-manifest                   "access plus 0 seconds"
  # Media
    ExpiresByType audio/ogg                             "access plus 1 year"
    ExpiresByType image/gif                             "access plus 1 year"
    ExpiresByType image/jpg                             "access plus 1 year"
    ExpiresByType image/jpeg                            "access plus 1 year"
    ExpiresByType image/png                             "access plus 1 year"
    ExpiresByType image/svg                             "access plus 1 year"
    ExpiresByType image/svg+xml                         "access plus 1 year"
    ExpiresByType video/mp4                             "access plus 1 year"
    ExpiresByType video/ogg                             "access plus 1 year"
    ExpiresByType video/webm                            "access plus 1 year"
    ExpiresByType image/x-icon                          "access plus 1 year"
    ExpiresByType application/pdf                       "access plus 1 year"
    ExpiresByType application/x-shockwave-flash         "access plus 1 year"
  # Web feeds
    ExpiresByType application/atom+xml                  "access plus 1 hour"
    ExpiresByType application/rss+xml                   "access plus 1 hour"
  # Web fonts
    ExpiresByType application/font-woff                 "access plus 1 year"
    ExpiresByType application/font-woff2                "access plus 1 year"
    ExpiresByType application/vnd.ms-fontobject         "access plus 1 year"
    ExpiresByType application/x-font-ttf                "access plus 1 year"
    ExpiresByType font/opentype                         "access plus 1 year"
</IfModule>
# END LBC
# GZIP enabled by SG-Optimizer
<IfModule mod_deflate.c>
    <IfModule mod_filter.c>
       AddOutputFilterByType DEFLATE "application/atom+xml" \
          "application/javascript" \
          "application/json" \
          "application/ld+json" \
          "application/manifest+json" \
          "application/rdf+xml" \
          "application/rss+xml" \
          "application/schema+json" \
          "application/vnd.geo+json" \
          "application/vnd.ms-fontobject" \
          "application/x-font-ttf" \
          "application/x-javascript" \
          "application/x-web-app-manifest+json" \
          "application/xhtml+xml" \
          "application/xml" \
          "font/eot" \
          "font/opentype" \
          "image/bmp" \
          "image/svg+xml" \
          "image/vnd.microsoft.icon" \
          "image/x-icon" \
          "text/cache-manifest" \
          "text/css" \
          "text/html" \
          "text/javascript" \
          "text/plain" \
          "text/vcard" \
          "text/vnd.rim.location.xloc" \
          "text/vtt" \
          "text/x-component" \
          "text/x-cross-domain-policy" \
          "text/xml"
    </IfModule>
</IfModule>
# END GZIP

Я пытался исправить это, удалив приведенные выше строки из .htaccess и добавив строки, подобные следующим:

# DISABLE CACHING
<IfModule mod_expires.c>
        ExpiresActive Off
</IfModule>
<IfModule mod_headers.c>
        FileETag None
        Header unset ETag
        Header unset Pragma
        Header unset Cache-Control
        Header unset Last-Modified
        Header set Pragma "no-cache"
        Header Set Cache-Control "max-age=0, public, must-revalidate"
        Header Set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
 </IfModule>

Но это не помогает. Кажется, что браузер просто больше не делает никаких запросов к серверу, поскольку он локально кэширует его и обслуживает все, начиная с локального кэша и заканчивая пользователем, до тех пор, пока не истечет максимальный срок 6 месяцев. Затем он проверит наличие новой версии. Эта проблема возникает на всех наших веб-сайтах, которые мы размещаем и создаем для наших клиентов, поэтому это большая проблема для нас.

Я уже пытался изменить URL сайта на один без www. Пытался переключить домашнюю страницу на другую, тоже не получилось. Может быть, переход на весь сайт к новому ip и изменение a-записи сработает для переопределения локального кэша?

Я ищу умный способ решить эту проблему. Я надеюсь, что кто-то знает решение.

Большое спасибо заранее!

1 Ответ

0 голосов
/ 28 марта 2020

Да, это проблема, с которой сталкивался каждый CDN, и затрудняет аннулирование нисходящего кэша. Существует два возможных решения.

Измените имя ресурса, это можно сделать автоматически с помощью Pagespeed, если вы контролируете сервер. См. фильтр расширения кэша .

. В качестве альтернативы встроите изображение в HTML, используя dataurl для RF C 2397 . Легче читать этот пост Фила Уилана.

...