Cloud CDN jest kluczowym elementem obsługi aplikacji internetowej przez App Hosting. Każde żądanie wysyłane do backendu przechodzi najpierw przez Cloud CDN. Treści, które są już zapisane w CDN, są natychmiast przesyłane do użytkownika, co pozwala pominąć usługę Cloud Run, która obsługuje kod serwera Twojej 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 modyfikować, możesz wykonać kilka czynności, aby zoptymalizować zapisywanie w pamięci podręcznej w celu zwiększenia szybkości wczytywania strony, zmniejszenia naliczanych opłat za treści nieprzechowywane w pamięci podręcznej oraz zminimalizowania ruchu do Cloud Run.
Treści, które można przechowywać w pamięci podręcznej
Cloud CDN przechowuje odpowiedzi w pamięci podręcznej, jeśli WSZYSTKIE te warunki są spełnione:
Żądanie jest żądaniem GET.
Odpowiedź ma kod stanu
200
,203
,204
,206
,300
,301
,302
,307
,308
,404
,405
,410
,421
,451
lub501
.Odpowiedź zawiera nagłówek
Cache-Control
z instrukcjąmax-age
lubs-maxage
lub nagłówekExpires
z oznaczeniem czasowym w przyszłości.Odpowiedź zawiera nagłówek
Age
lub nagłówekCache-Control
z wyraźną dyrektywąpublic
.Odpowiedź ma rozmiar nie większy niż 10 MiB.
i żadne z tych stwierdzeń nie jest prawdziwe:
Odpowiedź zawiera nagłówek
Set-Cookie
Odpowiedź zawiera nagłówek
Vary
z 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ź zawiera nagłówek
Cache-Control
z instrukcjąno-store
lubprivate
.Żądanie zawiera nagłówek
Cache-Control
z 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 w sposób domyślny na podstawie kilku czynników. Możesz jednak je zastąpić, 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 jawnych dyrektyw cache-control domyślnie. Możesz dodać własne nagłówki, określając nagłówki cache-control w swoich trasach serwera. Aby na przykład umożliwić Cloud CDN 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',
}
}
];
Aby mieć pewność, że dana 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',
}
}
];
Dyrektywy
Inicjalność Cloud CDN w Firebase App Hosting jest zgodna z tymi dyrektywami 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 no-store nie jest przechowywana w pamięci podręcznej. |
no-cache |
Dyrektywa żądania no-cache jest ignorowana, aby uniemożliwić klientom inicjowanie lub wymuszanie ponownej walidacji źródła. |
Odpowiedź z wartością 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 obsługi pamięci podręcznej, ale warto ją uwzględnić w przypadku treści, które powinny być przechowywane w pamięci podręcznej przez serwery proxy. |
private |
Nie dotyczy | Odpowiedź z dyrektywą private nie jest przechowywana w pamięci podręcznej usługi Cloud CDN, nawet jeśli jest ona uznawana za odpowiednią do przechowywania w pamięci podręcznej. Klienci (np. przeglądarki) mogą nadal przechowywać wynik w pamięci podręcznej. Użyj parametru no-store , aby zapobiec buforowaniu odpowiedzi. |
max-age=SECONDS |
Dyrektywa żądania max-age jest ignorowana. Zwracana jest odpowiedź z pamięci podręcznej, tak jakby ten nagłówek nie był uwzględniony w żądaniu. |
Odpowiedź z dyrektywą max-age jest przechowywana w pamięci podręcznej do określonej liczby sekund. |
s-maxage=SECONDS |
Nie dotyczy | Odpowiedź z dyrektywą s-maxage jest przechowywana w pamięci podręcznej do określonej liczby sekund. Jeśli dostępne są zarówno max-age , jak i s-maxage , sieć Cloud CDN używa wartości s‑maxage . Odpowiedzi z tą dyrektywą nie są przesyłane jako nieaktualne. s-max-age (2 łączniki) nie jest prawidłowy do celów buforowania. |
max-stale=SECONDS |
Dyrektywa max-stale żądania określa maksymalną nieaktualność (w sekundach), którą klient jest gotowy zaakceptować. Cloud CDN uwzględnia tę wartość i zwraca nieaktualną odpowiedź z pamięci podręcznej tylko wtedy, gdy nieaktualność odpowiedzi jest mniejsza niż wartość dyrektywy max-stale . W przeciwnym razie ponownie sprawdza poprawność przed wykonaniem żądania. |
Nie dotyczy |
stale-while-revalidate=SECONDS |
Nie dotyczy | Odpowiedź z stale-while-revalidate jest wysyłana do klienta przez maksymalnie SECONDS, podczas gdy weryfikacja odbywa się asynchronicznie. |
must-revalidate |
Nie dotyczy | Po upływie ważności odpowiedź z must-revalidate jest ponownie weryfikowana przez serwer źródłowy. Odpowiedzi z tą dyrektywą nie są przesyłane jako nieaktualne. |
proxy-revalidate |
Po upływie ważności odpowiedź z proxy-revalidate jest ponownie weryfikowana przez serwer źródłowy. Odpowiedzi z tą dyrektywą nie są przesyłane jako nieaktualne. |
|
no-transform |
Nie dotyczy | Cloud CDN nie stosuje żadnych przekształceń. |
Zliczanie ruchu z wykorzystaniem pamięci podręcznej i bez jej wykorzystania
Wykres „Cloud CDN – Przesyłana przepustowość” na karcie Wykorzystanie w konsoli App Hosting zawiera informacje o bajtach z pamięci podręcznej i bez niej oraz oznaczenia dla każdego wdrożenia. Za pomocą tego wykresu możesz mierzyć skuteczność optymalizacji pamięci podręcznej.