Cloud CDN to kluczowy element obsługi aplikacji internetowej przez App Hosting. Każde żądanie do backendu najpierw przechodzi przez Cloud CDN. Treści, które są już zapisane w pamięci podręcznej w sieci CDN, są natychmiast udostępniane użytkownikowi, bez konieczności przesyłania ich do usługi Cloud Run, w której działa kod serwera aplikacji internetowej. Więcej informacji o ogólnych zaletach sieci CDN znajdziesz na stronie web.dev.
Chociaż podstawowa konfiguracja Cloud CDN jest ustawiana przez App Hosting i nie można jej zmienić, możesz wykonać szereg czynności, aby zoptymalizować buforowanie w celu zwiększenia szybkości wczytywania strony, zmniejszenia ilości rozliczanych treści niebuforowanych i zminimalizowania ruchu do Cloud Run.
Treść podlegająca zapisywaniu w pamięci podręcznej
Cloud CDN przechowuje odpowiedzi w pamięci podręcznej, jeśli spełnione są WSZYSTKIE te warunki:
Żądanie jest typu GET.
Odpowiedź ma kod stanu
200,203,204,206,300,301,302,307,308,404,405,410,421,451lub501.Odpowiedź zawiera nagłówek
Cache-Controlz dyrektywąmax-agelubs-maxagealbo nagłówekExpiresz sygnaturą czasową w przyszłości.Odpowiedź zawiera nagłówek
AgelubCache-Controlz wyraźną dyrektywąpublic.Odpowiedź ma rozmiar nie większy niż 10 MiB.
oraz ŻADNE z tych stwierdzeń nie jest prawdziwe:
Odpowiedź zawiera nagłówek
Set-CookieOdpowiedź zawiera nagłówek
Varyo wartości innej niżAccept,Accept-Encoding,Access-Control-Request-Headers,Access-Control-Request-Method,Origin,Sec-Fetch-Dest,Sec-Fetch-Mode,Sec-Fetch-Site,X-Goog-Allowed-Resources,X-Origin,RSC,Next-Router-State-Tree,Next-Router-Prefetch,Next-Router-Segment-PrefetchlubNext-Url.Odpowiedź zawiera nagłówek
Cache-Controlz dyrektywąno-storelubprivate.Żądanie zawiera nagłówek
Cache-Controlz dyrektywąno-store.Żądanie ma nagłówek
Authorization, chyba że odpowiedź zawiera wyraźną dyrektywę kontroli pamięci podręcznej.
Dostosowywanie działania za pomocą dyrektyw kontroli pamięci podręcznej
Next.js
Next.js ustawia dyrektywy cache-control niejawnie na podstawie wielu czynników. Możesz je jednak zastąpić, ręcznie ustawiając nagłówek w pliku next.config.js. Aby na przykład upewnić się, że strona nie jest przechowywana w pamięci podręcznej Cloud CDN:
/** @type {import('next').NextConfig} */
const nextConfig = {
headers: async () => [{
source: "/YOUR_PRIVATE_PAGE",
headers: [{
key: "Cache-Control",
value: "private"
}],
}],
};
Angular
Angular SSR nie ustawia domyślnie jawnych dyrektyw kontroli pamięci podręcznej. Możesz dodać własne, określając nagłówki cache-control w trasach serwera. Aby na przykład zezwolić Cloud CDN na zapisywanie wszystkich stron w pamięci podręcznej przez godzinę:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: '**',
renderMode: RenderMode.Prerender,
headers: {
'Cache-Control': 'public, max-age=3600',
}
}
];
Aby upewnić się, że określona strona nie zostanie zapisana w pamięci podręcznej:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
// ... other routes
{
path: 'YOUR_PRIVATE_PAGE',
renderMode: RenderMode.Server,
headers: {
'Cache-Control': 'private',
}
}
];
Obowiązkowe dyrektywy
Instancja Cloud CDN Firebase App Hosting uwzględnia te dyrektywy kontroli pamięci podręcznej:
| Dyrektywa | Żądanie | Odpowiedź |
|---|---|---|
no-store |
Jeśli jest obecny w żądaniu, odpowiedź nie zostanie zapisana w pamięci podręcznej. | Odpowiedź z nagłówkiem no-store nie jest przechowywana w pamięci podręcznej. |
no-cache |
Dyrektywa żądania no-cache jest ignorowana, aby uniemożliwić klientom potencjalne inicjowanie lub wymuszanie ponownej weryfikacji w źródle. |
Odpowiedź z nagłówkiem no-cache jest przechowywana w pamięci podręcznej, ale przed wyświetleniem musi zostać ponownie zweryfikowana przez źródło. |
public |
Nie dotyczy | Ta dyrektywa nie jest wymagana do buforowania, ale zalecamy jej stosowanie w przypadku treści, które powinny być buforowane przez serwery proxy. |
private |
Nie dotyczy | Odpowiedź z dyrektywą private nie jest przechowywana w pamięci podręcznej Cloud CDN, nawet jeśli jest uznawana za możliwą do zapisania w pamięci podręcznej. Klienci (np. przeglądarki) mogą nadal przechowywać wynik w pamięci podręcznej. Użyj no-store, aby uniemożliwić buforowanie odpowiedzi. |
max-age=SECONDS |
Dyrektywa żądania max-age jest ignorowana. Odpowiedź z pamięci podręcznej jest zwracana tak, jakby ten nagłówek nie był uwzględniony w żądaniu. |
Odpowiedź z dyrektywą max-age jest przechowywana w pamięci podręcznej przez określoną liczbę sekund. |
s-maxage=SECONDS |
Nie dotyczy | Odpowiedź z dyrektywą s-maxage jest przechowywana w pamięci podręcznej przez określoną liczbę sekund. Jeśli występują zarówno max-age, jak i s-maxage, Cloud CDN używa s‑maxage. Odpowiedzi z tą dyrektywą nie są wyświetlane jako nieaktualne. s-max-age (2 łączniki) nie jest prawidłową wartością na potrzeby buforowania. |
max-stale=SECONDS |
Dyrektywa żądania max-stale określa maksymalną nieaktualność (w sekundach), którą klient jest w stanie zaakceptować. Cloud CDN uwzględnia to i zwraca nieaktualną odpowiedź z pamięci podręcznej tylko wtedy, gdy nieaktualność odpowiedzi jest mniejsza niż dyrektywa max-stale. W przeciwnym razie ponownie sprawdza poprawność przed obsłużeniem żądania. |
Nie dotyczy |
stale-while-revalidate=SECONDS |
Nie dotyczy | Odpowiedź z stale-while-revalidate jest wyświetlana klientowi przez maksymalnie SECONDS, podczas gdy ponowna weryfikacja odbywa się asynchronicznie. |
must-revalidate |
Nie dotyczy | Odpowiedź z nagłówkiem must-revalidate jest po wygaśnięciu ponownie sprawdzana na serwerze pierwotnym. Odpowiedzi z tą dyrektywą nie są wyświetlane jako nieaktualne. |
proxy-revalidate |
Odpowiedź z nagłówkiem proxy-revalidate jest ponownie sprawdzana na serwerze pierwotnym po wygaśnięciu. Odpowiedzi z tą dyrektywą nie są wyświetlane jako nieaktualne. |
|
no-transform |
Nie dotyczy | Cloud CDN nie stosuje żadnych przekształceń. |
Pomiar ruchu w pamięci podręcznej i poza nią
Na karcie App Hosting > Użycie w konsoli Firebase wykres „Cloud CDN – przepustowość dla ruchu wychodzącego” pokazuje liczbę bajtów obsłużonych z pamięci podręcznej i bez niej. Każde wdrożenie jest oznaczone. Za pomocą tego wykresu możesz mierzyć skuteczność działań związanych z optymalizacją pamięci podręcznej.
Możesz też wyświetlić współczynnik trafień w pamięci podręcznej dla konkretnych tras w aplikacji internetowej za pomocą monitorowania opartego na trasach.