Как предотвратить загрузку chrome index.html из дискового кэша после перенаправления 301 - PullRequest
0 голосов
/ 30 декабря 2018

У нас возникает проблема с кешем Chrome всякий раз, когда мы выпускаем новую версию нашего сайта, мы искали дни и добавляли / удаляли любые заголовки, мета-теги, конфигурацию nginx и т. Д., Которые могут вызвать эту проблему или, как говорят, исправитьэто, но ничего не изменилось.index.html все еще кэшируется, и мы должны нажать F5, чтобы увидеть новые изменения на случайных компьютерах,

Сайт реализован в виде SPA, с использованием фреймворка angularjs и размещен с использованием ngnix, который находится за трафикомпрокси, используя правила traefik, мы принудительно перенаправляем HTTP-запросы к HTTPS с помощью ответа 301.

сегодня я обнаружил сбойный сценарий!если пользователь вводит протокол https в адресной строке (например, https://example.com), все работает правильно, но если пользователь возвращается и пытается посетить http://example.com,, Chrome перенаправит пользователя на https через 301 кэш перенаправления, затем загружает кэшированную версию index.html, что не то, что мы хотим, это нормально, что 301 редирект кэшируется, но мы хотим, чтобы chrome получал index.html с сервера, не загружая его из дискового кеша!

Примечание: пока пользователь использует HTTPS, индекс загружается с сервера или получает ответ 304, мы хотим, чтобы это происходило, когда пользователь входит только в сам домен, а не с https.

этометатеги, которые добавляются в index.html:

<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="pragma" content="no-cache" />

и вот часть нашей конфигурации nginx:

...
http {
    ...
    proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=prerender_cache:100m max_size=10g inactive=1d;
    proxy_cache_key "$request_method$host$request_uri$is_args$args";
    ...
    server {
        access_log /dev/stdout combined1;
        listen      80 default_server;
        server_name example.com;
        root /app;
        index  index.html;
        ...
        location ~ ^/(assets|static|styles) {
            expires     31d;
            add_header  Cache-Control public;
        }
        location @asset_pass {
            root app/;
            try_files $uri =404;
        }
        location / {
            expires -1;
            add_header Pragma "no-cache";
            add_header Cache-Control "no-store, no-cache, must-revalicate, post-check=0 pre-check=0";
            try_files $uri @prerender;
            autoindex on;
        }
        location ~ \.html$ {
            expires -1;
            add_header Pragma "no-cache";
            add_header Cache-Control "no-store, no-cache, must-revalicate, post-check=0 pre-check=0";
        }
    }
}

Теперь вопрос: есть ли способ исправить это илиэто поведение по умолчанию в Google Chrome?

Спасибо всем, что нашли время прочитать этот вопрос, и извините, если он был слишком длинным.

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