تشكّل خدمة Cloud CDN جزءًا مهمًا من دعم App Hosting لتطبيق الويب، إذ يمرّ كل طلب إلى الخلفية عبر Cloud CDN أولاً. يتم عرض المحتوى المخزّن مؤقتًا في شبكة توصيل المحتوى (CDN) للمستخدم على الفور، بدون الحاجة إلى الانتقال إلى خدمة Cloud Run التي تشغّل رمز خادم تطبيق الويب. يمكنك الاطّلاع على مزيد من المعلومات حول المزايا العامة لشبكات توصيل المحتوى على web.dev.
على الرغم من أنّ إعدادات Cloud CDN الأساسية يتم ضبطها من خلال App Hosting ولا يمكن تعديلها، هناك عدد من الإجراءات التي يمكنك اتّخاذها لتحسين التخزين المؤقت من أجل زيادة سرعات تحميل الصفحات وتقليل المحتوى غير المخزّن مؤقتًا الذي يتم تحصيل رسوم مقابله وتقليل عدد الزيارات إلى Cloud Run.
المحتوى القابل للتخزين المؤقت
تخزّن شبكة Cloud CDN الردود في ذاكرة التخزين المؤقت إذا تحقّق جميع الشروط التالية:
الطلب هو GET
تحتوي الاستجابة على رمز حالة
200
أو203
أو204
أو206
أو300
أو301
أو302
أو307
أو308
أو404
أو405
أو410
أو421
أو451
أو501
.تحتوي الاستجابة على عنوان
Cache-Control
مع توجيهmax-age
أوs-maxage
، أو عنوانExpires
مع طابع زمني في المستقبل.تحتوي الاستجابة على العنوان
Age
أو العنوانCache-Control
مع توجيهpublic
صريح.يجب أن يكون حجم الردّ أقل من أو يساوي 10 ميغابايت.
ولا ينطبق أيّ مما يلي:
تحتوي الاستجابة على عنوان
Set-Cookie
يتضمّن الردّ العنوان
Vary
بقيمة أخرى غير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-Prefetch
.تحتوي الاستجابة على عنوان
Cache-Control
مع التوجيهno-store
أوprivate
.يتضمّن الطلب عنوان
Cache-Control
مع توجيهno-store
.يحتوي الطلب على العنوان
Authorization
، ما لم تتضمّن الاستجابة توجيهًا صريحًا للتحكّم في ذاكرة التخزين المؤقت.
تخصيص السلوك باستخدام توجيهات التحكّم في ذاكرة التخزين المؤقت
Next.js
تضبط Next.js توجيهات cache-control ضمنيًا استنادًا إلى عدد من
العوامل. ومع ذلك، يمكنك تجاهل هذه القيم من خلال ضبط العنوان يدويًا في ملف next.config.js
. على سبيل المثال، لضمان عدم تخزين صفحة مؤقتًا في Cloud CDN، اتّبِع الخطوات التالية:
/** @type {import('next').NextConfig} */
const nextConfig = {
headers: async () => [{
source: "/YOUR_PRIVATE_PAGE",
headers: [{
key: "Cache-Control",
value: "private"
}],
}],
};
Angular
لا يضبط Angular SSR توجيهات cache-control الصريحة بعد إخراجه من الصندوق. يمكنك إضافة عناوين خاصة بك من خلال تحديد عناوين cache-control في مسارات الخادم. على سبيل المثال، للسماح لخدمة Cloud CDN بتخزين جميع الصفحات مؤقتًا لمدة ساعة:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: '**',
renderMode: RenderMode.Prerender,
headers: {
'Cache-Control': 'public, max-age=3600',
}
}
];
أو لضمان عدم تخزين صفحة معيّنة مؤقتًا، اتّبِع الخطوات التالية:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
// ... other routes
{
path: 'YOUR_PRIVATE_PAGE',
renderMode: RenderMode.Server,
headers: {
'Cache-Control': 'private',
}
}
];
التوجيهات التي يجب اتّباعها
تلتزم مثيل Cloud CDN في Firebase App Hostingبتوجيهات التحكّم في ذاكرة التخزين المؤقت التالية:
التوجيه | الطلب | الردّ |
---|---|---|
no-store |
عند توفّرها في الطلب، لن يتم تخزين الرد مؤقتًا. | لا يتم تخزين الرد الذي يتضمّن no-store مؤقتًا. |
no-cache |
يتم تجاهل توجيه الطلب no-cache لمنع العملاء من بدء عملية إعادة التحقّق من الصحة أو فرضها على المصدر. |
يتم تخزين الرد الذي يتضمّن no-cache مؤقتًا، ولكن يجب إعادة التحقّق من صحته مع المصدر قبل عرضه. |
public |
لا ينطبق | هذا التوجيه غير مطلوب لإمكانية التخزين المؤقت، ولكن من أفضل الممارسات تضمينه للمحتوى الذي يجب أن تخزّنه الخوادم الوكيلة مؤقتًا. |
private |
لا ينطبق | لا يتم تخزين استجابة تتضمّن التوجيه private مؤقتًا في Cloud CDN، حتى إذا كانت الاستجابة قابلة للتخزين المؤقت. قد تواصل البرامج المستخدِمة (مثل المتصفحات) تخزين النتيجة مؤقتًا. استخدِم no-store لمنع التخزين المؤقت لجميع الردود. |
max-age=SECONDS |
يتم تجاهل توجيه الطلب max-age . يتم عرض استجابة مخزَّنة مؤقتًا كما لو أنّ هذا العنوان لم يتم تضمينه في الطلب. |
يتم تخزين استجابة تتضمّن التوجيه max-age مؤقتًا لمدة تصل إلى عدد الثواني المحدّد. |
s-maxage=SECONDS |
لا ينطبق | يتم تخزين استجابة تتضمّن التوجيه s-maxage مؤقتًا لمدة تصل إلى عدد الثواني المحدّد. في حال توفّر كل من max-age وs-maxage ، تستخدم Cloud CDN السمة s‑maxage . لا يتم عرض الردود التي تتضمّن هذه التوجيهات على أنّها قديمة. إنّ s-max-age (شرطتان) غير صالح لأغراض التخزين المؤقت. |
max-stale=SECONDS |
يحدّد توجيه الطلب max-stale الحد الأقصى لتقادم المحتوى (بالثواني) الذي يوافق عليه العميل. تلتزم Cloud CDN بذلك، ولا تعرض استجابة مخزّنة مؤقتًا قديمة إلا إذا كانت مدة عدم صلاحية الاستجابة أقل من توجيه max-stale . بخلاف ذلك، تتم إعادة التحقّق من صحة الرمز قبل عرض الطلب. |
لا ينطبق |
stale-while-revalidate=SECONDS |
لا ينطبق | يتم عرض ردّ يتضمّن stale-while-revalidate للعميل لمدة تصل إلى ثوانٍ أثناء إعادة التحقّق بشكل غير متزامن. |
must-revalidate |
لا ينطبق | تتم إعادة التحقّق من صحة الاستجابة التي تتضمّن must-revalidate باستخدام خادم المصدر بعد انتهاء صلاحيتها. لا يتم عرض الردود التي تتضمّن هذه التوجيهات على أنّها قديمة. |
proxy-revalidate |
تتم إعادة التحقّق من صحة الاستجابة التي تتضمّن proxy-revalidate باستخدام خادم المصدر بعد انتهاء صلاحيتها. لا يتم عرض الردود التي تتضمّن هذه التوجيهات على أنّها قديمة. |
|
no-transform |
لا ينطبق | لا تطبّق Cloud CDN أي عمليات تحويل. |
قياس عدد الزيارات المخزَّنة مؤقتًا وغير المخزَّنة مؤقتًا
يعرض الرسم البياني "Cloud CDN - النطاق الترددي الصادر" في علامة التبويب الاستخدام ضمن وحدة تحكّم App Hosting عدد البايتات التي تم عرضها من ذاكرة التخزين المؤقت وتلك التي لم يتم عرضها منها، ويتضمّن علامة لكل عملية طرح. يمكنك استخدام هذا الرسم البياني لقياس فعالية جهودك في تحسين ذاكرة التخزين المؤقت.