To ćwiczenie w Codelabs pokazuje, jak zmienić nagłówki buforowania HTTP zwracane przez Serwer WWW oparty na Node.js, z obsługą obsługi Express platformy. Pokażemy też, jak potwierdzić, że buforowanie działa zgodnie z oczekiwaniami. jest faktycznie stosowany. Aby to zrobić, użyj panelu Network (Sieć) w Narzędziach deweloperskich w Chrome.
Zapoznaj się z przykładowym projektem
Oto najważniejsze pliki, z którymi będziesz pracować w przykładowym projekcie:
server.js
zawiera kod Node.js, który obsługuje treści. Do obsługi żądań HTTP używa Express. i udzielania odpowiedzi. W szczególności tagexpress.static()
służy do wyświetlania wszystkich plików lokalnych w katalogu publicznym, przez co operatorserve-static
dokumentacja może Ci się przydać.public/index.html
to kod HTML aplikacji internetowej. Podobnie jak w przypadku większości plików HTML, zawierać w swoim adresie URL jakiekolwiek informacje o wersji.public/app.15261a07.js
ipublic/style.391484cf.css
to JavaScript aplikacji internetowej i komponentów CSS. Każdy z tych plików ma w adresach URL pewną hasz, odpowiadający ich treściom.index.html
odpowiada za zachowanie konkretnego adresu URL z obsługą wersji, który ma zostać wczytany.
Skonfiguruj nagłówki buforowania dla naszego kodu HTML
W odpowiedzi na żądania dotyczące adresów URL, które nie zawierają informacji o wersji, upewnij się,
dodaj atrybut Cache-Control: no-cache
do odpowiedzi. Razem z
że zalecamy ustawienie jednego z dwóch dodatkowych nagłówków odpowiedzi:
Last-Modified
lub ETag
.
Do tej kategorii należy index.html
. Możesz to podzielić na 2 kroki.
Po pierwsze nagłówki Last-Modified
i ETag
są kontrolowane przez
etag
.
oraz
lastModified
opcje konfiguracji. Obie te opcje domyślnie mają ustawienie true
dla wszystkich
odpowiedzi HTTP, więc przy obecnej konfiguracji nie musisz wyrazić zgody na ich otrzymywanie
zachowanie użytkownika. Możesz jednak to zrobić w sposób wyraźny w swojej konfiguracji.
Po drugie, musisz być w stanie dodać nagłówek Cache-Control: no-cache
, ale
tylko dla dokumentów HTML (w tym przypadku index.html
). Najprostszy sposób
warunkowo ustawić ten nagłówek, to napisanie niestandardowego
setHeaders function
W tym celu sprawdź, czy przychodzące żądanie dotyczy dokumentu HTML.
- Aby udostępnić projekt do edycji, kliknij Remiksuj, aby edytować.
Statyczna konfiguracja wyświetlania w server.js
zaczyna się tak:
app.use(express.static('public'));
- Po dokonaniu opisanych powyżej zmian powinno powstać coś, wygląda jak:
app.use(express.static('public', {
etag: true, // Just being explicit about the default.
lastModified: true, // Just being explicit about the default.
setHeaders: (res, path) => {
if (path.endsWith('.html')) {
// All of the project's HTML files end in .html
res.setHeader('Cache-Control', 'no-cache');
}
},
}));
Skonfiguruj nagłówki buforowania dla adresów URL z wersjami
W odpowiedzi na żądania dotyczące adresów URL zawierających
„odcisk palca” lub
informacji o obsłudze wersji, których treść nigdy nie powinna być zmieniana,
Cache-Control: max-age=31536000
na Twoje odpowiedzi. app.15261a07.js
i
Do tej kategorii należą style.391484cf.css
.
Podstawy
setHeaders function
użyte w ostatnim kroku, możesz dodać funkcje logiczne, aby sprawdzić, czy
dotyczy wersji adresu URL, a jeśli tak, dodaj nagłówek Cache-Control:
max-age=31536000
.
Najlepszym sposobem w tym celu jest użycie
wyrażenie regularne
czy zasób, o który prosisz, pasuje do wzorca
w których wchodzą hasze. W tym przykładowym projekcie zawsze jest to osiem
z zestawu cyfr 0–9 i małych liter a–f (tzn.
szesnastkowych). Hasz
jest zawsze rozdzielony znakiem .
po obu stronach.
Wyrażenie regularne, które
jest zgodne z tymi ogólnymi regułami
może być wyrażona jako new RegExp('\\.[0-9a-f]{8}\\.')
.
- Zmodyfikuj funkcję
setHeaders
, aby wyglądała tak:
app.use(express.static('public', {
etag: true, // Just being explicit about the default.
lastModified: true, // Just being explicit about the default.
setHeaders: (res, path) => {
const hashRegExp = new RegExp('\\.[0-9a-f]{8}\\.');
if (path.endsWith('.html')) {
// All of the project's HTML files end in .html
res.setHeader('Cache-Control', 'no-cache');
} else if (hashRegExp.test(path)) {
// If the RegExp matched, then we have a versioned URL.
res.setHeader('Cache-Control', 'max-age=31536000');
}
},
}));
Potwierdzanie nowego zachowania za pomocą Narzędzi deweloperskich
Po wprowadzeniu zmian statycznego serwera plików możesz sprawdzić, czy sprawdź, czy ustawione są odpowiednie nagłówki, wyświetlając podgląd aktywnej aplikacji z otwartym panelem Network (Sieć) w Narzędziach deweloperskich.
Aby wyświetlić podgląd strony, kliknij Wyświetl aplikację. Następnie naciśnij Pełny ekran
Dostosuj kolumny, które mają być zostaną wyświetlone w panelu Sieć i zawierają najistotniejsze informacje. Wystarczy, że klikniesz prawym przyciskiem nagłówek kolumny:
Zwróć uwagę na te kolumny: Name
, Status
, Cache-Control
,
ETag
i Last-Modified
.
- Otwórz panel Network (Sieć) w Narzędziach deweloperskich i odśwież stronę.
Po załadowaniu strony w panelu Network (Sieć) powinny być widoczne wpisy wyglądające np.:
Pierwszy wiersz dotyczy otwartego dokumentu HTML. Tak jest prawidłowo
obsługiwane za pomocą usługi Cache-Control: no-cache
. stan odpowiedzi HTTP danego żądania,
to 304
. Ten
oznacza, że przeglądarka nie powinna od razu używać kodu HTML zapisanego w pamięci podręcznej, ale zamiast
wysłał(a) żądanie HTTP do serwera WWW przy użyciu interfejsów Last-Modified
i ETag
informacje o tym, czy jego kod HTML został już zaktualizowany.
jej pamięci podręcznej. Odpowiedź HTTP 304 oznacza, że kod HTML nie został zaktualizowany.
Następne 2 wiersze dotyczą wersjonowanych zasobów JavaScript i CSS. Zalecenia
zostaną wyświetlone z parametrem Cache-Control: max-age=31536000
, a stan HTTP witryny
każdy z nich to 200
.
Ze względu na zastosowaną konfigurację nie jest wysyłane żadne żądanie do
na serwerze Node.js. Po kliknięciu wpisu zobaczysz dodatkowe informacje.
w tym informację o tym, że odpowiedź pochodzi „(z pamięci podręcznej dysku)”.
Rzeczywiste wartości w kolumnach ETag i Ostatnia modyfikacja nie mają większego znaczenia. ważne jest potwierdzenie, że zostały skonfigurowane.
Podsumowywanie rzeczy
Po wykonaniu wszystkich kroków z tego ćwiczenia z programowania wiesz już, jak skonfigurować nagłówki odpowiedzi HTTP na serwerze WWW opartym na Node.js przy użyciu Express, w celu optymalnego wykorzystania pamięci podręcznej HTTP. Musisz też wykonać kilka czynności, aby potwierdzić w panelu Network (Sieć) w Narzędzia deweloperskie w Chrome.