Wpis z mikrobloga

Pamiętacie to? Znalazłem przyczynę. Otóż używamy wtyczki jib-maven-plugin do budowania obrazów Docker. Tak narzucił pośrednik klienta, ale mamy wolną rękę i można to zmienić. Wtyczka ta dba o reproducible builds i między innymi ustawia wszystkie daty na 1970. W konfiguracji nie da się zachować oryginalnych dat, a jedynie ustawić sztywną datę.

Ale czy to by pomogło i przeglądarka za każdym razem by sprawdzała, czy jest nowa wersja?

Z serwera dostajemy:
- Last-Modified: Thu, 01 Jan 1970 00:00:01 GMT
- ETag: 3278434589

Nie dostajemy nagłówka Cache-Control.

ETag nie powinien się zmienić dla index.html, ale czasami się zmienia i przeglądarka ponownie załaduje z serwera, ale zazwyczaj robię update na serwerze i przeglądarka dalej ładuje starą wersję aplikacji Angular.

Potencjalnych rozwiązań jest kilka:

1. Cache-Control: no-cache lub must-revalidate dla index.html (i potencjalnie dla wszystkich innych plików)
2. Service worker, który sprawdza, czy wyszła nowa wersja (polecane zwłaszcza w aplikacjach PWA)
3. Inne pomysły?

1 będzie kłócić się z 2 jeśli kiedyś aplikacja zostanie zamieniona w PWA.

Ale bardziej interesuje mnie, co z tym Last-Modified i czy to normalna praktyka?

https://wykop.pl/wpis/84043077/wdrazamy-nowa-wersje-aplikacji-angular-klient-nada

Jeszcze do poczytania:

https://github.com/GoogleContainerTools/jib/issues/1800
https://reproducible-builds.org

#programowanie #angular #frontend #docker #devops
@SendMeAnAngel 0
Wdrażamy nową wersję aplikacji Angular. Klient nadal widzi starą wersję, bo przeglądarka zapisała w pamięci podręcznej. Jak sobie z tym radzić? Angular tworzy pliki .js z losowym ciągiem znaków, ale to index.html jest cachowany.

Po analizie wyszło, że serwer lighttpd zwraca datę Last-Modified 1970.

Można wymusić Cache-Control: no-cache, no-store, must-revalidate

Ale
  • 1
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach