Cloud CDN to kluczowy element obsługi aplikacji internetowej w App Hosting. Każde żądanie do backendu przechodzi najpierw przez Cloud CDN. Treści, które są już zapisane w pamięci podręcznej CDN, są natychmiast udostępniane użytkownikowi, co pozwala uniknąć wysyłania żądania do usługi Cloud Run, która uruchamia kod serwera aplikacji internetowej. Więcej informacji o ogólnych zaletach sieci CDN znajdziesz w witrynie web.dev.
Podstawowa konfiguracja Cloud CDN jest ustawiana przez App Hosting i nie można jej modyfikować. Możesz jednak zoptymalizować buforowanie, aby zwiększyć szybkość wczytywania stron, zmniejszyć ilość płatnych treści niebuforowanych i zminimalizować ruch do Cloud Run.
Treści podlegające zapisywaniu w pamięci podręcznej
Cloud CDN przechowuje odpowiedzi w pamięci podręcznej, jeśli WSZYSTKIE te warunki są spełnione:
Żądanie jest typu GET.
Odpowiedź ma kod stanu
200,203,204,206,300,301,302,307,308,404,405,410,421,451lub501.Odpowiedź ma nagłówek
Cache-Controlz dyrektywąmax-agelubs-maxagealbo nagłówekExpiresze znacznikiem czasu w przyszłości.Odpowiedź ma nagłówek
Agelub nagłówekCache-Controlz jawną dyrektywąpublic.Rozmiar odpowiedzi nie przekracza 10 MiB.
i ŻADEN z tych warunków nie jest spełniony:
Odpowiedź ma nagłówek
Set-Cookie.Odpowiedź ma nagłówek
Varyz wartością inną 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, lubNext-Router-Segment-Prefetch.Odpowiedź ma nagłówek
Cache-Controlz dyrektywąno-storelubprivate.Żądanie ma nagłówek
Cache-Controlz dyrektywąno-store.Żądanie ma nagłówek
Authorization, chyba że odpowiedź ma jawną dyrektywę dotyczącą sterowania pamięcią podręczną.
Dostosowywanie działania za pomocą dyrektyw sterowania pamięcią podręczną
Next.js
Next.js ustawia dyrektywy sterowania pamięcią podręczną niejawnie na podstawie kilku
czynników. Możesz jednak zastąpić te ustawienia, ręcznie ustawiając nagłówek w pliku
next.config.js. Aby na przykład mieć pewność, że strona nie jest buforowana w 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 sterowania pamięcią podręczną. Możesz dodać własne, określając nagłówki sterowania pamięcią podręczną w trasach serwera. Aby na przykład zezwolić Cloud CDN na buforowanie wszystkich stron przez godzinę:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: '**',
renderMode: RenderMode.Prerender,
headers: {
'Cache-Control': 'public, max-age=3600',
}
}
];
Lub aby mieć pewność, że określona strona nie będzie buforowana:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
// ... other routes
{
path: 'YOUR_PRIVATE_PAGE',
renderMode: RenderMode.Server,
headers: {
'Cache-Control': 'private',
}
}
];
Uwzględniane dyrektywy
Instancja Cloud CDN w Firebase App Hosting's uwzględnia te dyrektywy sterowania pamięcią podręczną:
| Dyrektywa | Żądanie | Odpowiedź |
|---|---|---|
no-store |
Jeśli ta dyrektywa jest obecna w żądaniu, odpowiedź nie będzie buforowana. | Odpowiedź z dyrektywą no-store nie jest buforowana. |
no-cache |
Dyrektywa żądania no-cache jest ignorowana, aby uniemożliwić klientom inicjowanie lub wymuszanie ponownej weryfikacji w punkcie początkowym. |
Odpowiedź z dyrektywą no-cache jest buforowana, ale przed jej udostępnieniem musi zostać ponownie zweryfikowana w punkcie początkowym. |
public |
Nie dotyczy | Ta dyrektywa nie jest wymagana do buforowania, ale warto ją uwzględnić w przypadku treści, które powinny być buforowane przez serwery proxy. |
private |
Nie dotyczy | Odpowiedź z dyrektywą private nie jest buforowana przez Cloud CDN, nawet jeśli w przeciwnym razie byłaby uznawana za podlegającą buforowaniu. Klienci (np. przeglądarki) mogą nadal buforować wynik. Aby zapobiec buforowaniu odpowiedzi, użyj dyrektywy no-store. |
max-age=SECONDS |
Dyrektywa żądania max-age jest ignorowana. Buforowana odpowiedź jest zwracana tak, jakby ten nagłówek nie był uwzględniony w żądaniu. |
Odpowiedź z dyrektywą max-age jest buforowana przez określony czas (w SEKUNDACH). |
s-maxage=SECONDS |
Nie dotyczy | Odpowiedź z dyrektywą s-maxage jest buforowana przez określony czas (w SEKUNDACH). Jeśli występują zarówno dyrektywy max-age, jak i s-maxage, Cloud CDN używa dyrektywy s‑maxage. Odpowiedzi z tą dyrektywą nie są udostępniane jako nieaktualne. Dyrektywa s-max-age (z 2 łącznikami) nie jest prawidłowa na potrzeby buforowania. |
max-stale=SECONDS |
Dyrektywa żądania max-stale określa maksymalną nieaktualność (w sekundach), jaką klient jest gotów zaakceptować. Cloud CDN uwzględnia tę dyrektywę i zwraca nieaktualną buforowaną odpowiedź tylko wtedy, gdy nieaktualność odpowiedzi jest mniejsza niż wartość dyrektywy max-stale. W przeciwnym razie przed udostępnieniem żądania ponownie je weryfikuje. |
Nie dotyczy |
stale-while-revalidate=SECONDS |
Nie dotyczy | Odpowiedź z dyrektywą stale-while-revalidate jest udostępniana klientowi przez określony czas (w SEKUNDACH), podczas gdy ponowna weryfikacja odbywa się asynchronicznie. |
must-revalidate |
Nie dotyczy | Odpowiedź z dyrektywą must-revalidate jest ponownie weryfikowana na serwerze pierwotnym po wygaśnięciu. Odpowiedzi z tą dyrektywą nie są udostępniane jako nieaktualne. |
proxy-revalidate |
Odpowiedź z dyrektywą proxy-revalidate jest ponownie weryfikowana na serwerze pierwotnym po wygaśnięciu. Odpowiedzi z tą dyrektywą nie są udostępniane jako nieaktualne. |
|
no-transform |
Nie dotyczy | Cloud CDN nie stosuje żadnych przekształceń. |
Pomiar ruchu buforowanego i niebuforowanego
Na karcie App Hosting > Użycie w konsoli Firebase wykres „Cloud CDN – przepustowość wychodząca” pokazuje liczbę udostępnionych bajtów buforowanych i niebuforowanych, oraz oznaczenie każdej wersji. Za pomocą tego wykresu możesz mierzyć skuteczność optymalizacji pamięci podręcznej.
Możesz też wyświetlić współczynnik trafień w pamięci podręcznej dla określonych tras w aplikacji internetowej za pomocą monitorowania opartego na trasach.