Cloud CDN là một phần quan trọng trong việc hỗ trợ ứng dụng web của App Hosting. Mọi yêu cầu đến phần phụ trợ của bạn đều phải thông qua Cloud CDN trước. Nội dung đã được lưu vào bộ nhớ đệm trong CDN sẽ được phân phát ngay cho người dùng, bỏ qua một chuyến đi đến dịch vụ Cloud Run đang chạy mã máy chủ của ứng dụng web. Bạn có thể tìm hiểu thêm về những lợi ích chung của CDN tại web.dev.
Mặc dù App Hosting đặt cấu hình Cloud CDN cơ bản và bạn không thể sửa đổi cấu hình này, nhưng bạn có thể làm một số việc để tối ưu hoá hoạt động lưu vào bộ nhớ đệm nhằm tăng tốc độ tải trang, giảm nội dung chưa được lưu vào bộ nhớ đệm phải trả phí và giảm thiểu lưu lượng truy cập vào Cloud Run.
Nội dung có thể lưu vào bộ nhớ đệm
Cloud CDN lưu trữ các phản hồi trong bộ nhớ đệm nếu TẤT CẢ các điều kiện sau đây đều đúng:
Yêu cầu là một yêu cầu GET
Phản hồi có mã trạng thái là
200
,203
,204
,206
,300
,301
,302
,307
,308
,404
,405
,410
,421
,451
hoặc501
.Phản hồi có tiêu đề
Cache-Control
với chỉ thịmax-age
hoặcs-maxage
, hoặc tiêu đềExpires
có dấu thời gian trong tương lai.Phản hồi có tiêu đề
Age
hoặc tiêu đềCache-Control
với chỉ thịpublic
rõ ràng.Phản hồi có kích thước nhỏ hơn hoặc bằng 10 MiB.
và KHÔNG CÓ điều kiện nào sau đây được đáp ứng:
Phản hồi có tiêu đề
Set-Cookie
Phản hồi có tiêu đề
Vary
với giá trị khácAccept
,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
hoặcNext-Router-Segment-Prefetch
.Phản hồi có tiêu đề
Cache-Control
với chỉ thịno-store
hoặcprivate
.Yêu cầu có tiêu đề
Cache-Control
với chỉ thịno-store
.Yêu cầu có tiêu đề
Authorization
, trừ phi phản hồi có chỉ thị kiểm soát bộ nhớ đệm rõ ràng.
Tuỳ chỉnh hành vi bằng các chỉ thị kiểm soát bộ nhớ đệm
Next.js
Next.js đặt các chỉ thị kiểm soát bộ nhớ đệm một cách ngầm định dựa trên một số yếu tố. Tuy nhiên, bạn có thể ghi đè các giá trị này bằng cách đặt tiêu đề theo cách thủ công trong tệp next.config.js
. Ví dụ: để đảm bảo một trang không được lưu vào bộ nhớ đệm trong Cloud CDN:
/** @type {import('next').NextConfig} */
const nextConfig = {
headers: async () => [{
source: "/YOUR_PRIVATE_PAGE",
headers: [{
key: "Cache-Control",
value: "private"
}],
}],
};
Angular
SSR Angular không thiết lập các chỉ thị kiểm soát bộ nhớ đệm rõ ràng ngay từ đầu. Bạn có thể thêm các tiêu đề của riêng mình bằng cách chỉ định tiêu đề cache-control trong các tuyến máy chủ. Ví dụ: để cho phép Cloud CDN lưu vào bộ nhớ đệm tất cả các trang trong một giờ:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: '**',
renderMode: RenderMode.Prerender,
headers: {
'Cache-Control': 'public, max-age=3600',
}
}
];
Hoặc để đảm bảo một trang cụ thể không được lưu vào bộ nhớ đệm:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
// ... other routes
{
path: 'YOUR_PRIVATE_PAGE',
renderMode: RenderMode.Server,
headers: {
'Cache-Control': 'private',
}
}
];
Lệnh được tuân thủ
Phiên bản CDN trên đám mây của Firebase App Hosting tuân theo các chỉ thị kiểm soát bộ nhớ đệm sau đây:
Chỉ thị | Yêu cầu | Phản hồi |
---|---|---|
no-store |
Khi có trong yêu cầu, phản hồi sẽ không được lưu vào bộ nhớ đệm. | Phản hồi có no-store không được lưu vào bộ nhớ đệm. |
no-cache |
Chỉ thị yêu cầu no-cache sẽ bị bỏ qua để ngăn các ứng dụng có khả năng bắt đầu hoặc buộc xác thực lại nguồn gốc. |
Phản hồi có no-cache được lưu vào bộ nhớ đệm nhưng phải được xác thực lại bằng nguồn gốc trước khi được phân phát. |
public |
Không áp dụng | Chỉ thị này không bắt buộc đối với khả năng lưu vào bộ nhớ đệm, nhưng bạn nên đưa chỉ thị này vào nội dung mà các proxy nên lưu vào bộ nhớ đệm. |
private |
Không áp dụng | Cloud CDN không lưu vào bộ nhớ đệm phản hồi có chỉ thị private , ngay cả khi phản hồi đó được coi là có thể lưu vào bộ nhớ đệm. Các ứng dụng (chẳng hạn như trình duyệt) vẫn có thể lưu kết quả vào bộ nhớ đệm. Sử dụng no-store để ngăn tất cả các phản hồi được lưu vào bộ nhớ đệm. |
max-age=SECONDS |
Lệnh yêu cầu max-age sẽ bị bỏ qua. Phản hồi được lưu trong bộ nhớ đệm sẽ được trả về như thể tiêu đề này không có trong yêu cầu. |
Phản hồi có chỉ thị max-age được lưu vào bộ nhớ đệm cho đến khi đạt đến số GIÂY đã xác định. |
s-maxage=SECONDS |
Không áp dụng | Phản hồi có chỉ thị s-maxage được lưu vào bộ nhớ đệm cho đến khi đạt đến số GIÂY đã xác định. Nếu cả max-age và s-maxage đều có mặt, thì Cloud CDN sẽ sử dụng s‑maxage . Các phản hồi có chỉ thị này sẽ không được phân phát khi đã cũ. s-max-age (hai dấu gạch ngang) không hợp lệ cho mục đích lưu vào bộ nhớ đệm. |
max-stale=SECONDS |
Chỉ thị yêu cầu max-stale quy định độ cũ tối đa (tính bằng giây) mà máy khách sẵn sàng chấp nhận. Cloud CDN tuân thủ chỉ thị này và chỉ trả về phản hồi được lưu vào bộ nhớ đệm đã lỗi thời nếu độ lỗi thời của phản hồi nhỏ hơn chỉ thị max-stale . Nếu không, nó sẽ xác thực lại trước khi xử lý yêu cầu. |
Không áp dụng |
stale-while-revalidate=SECONDS |
Không áp dụng | Phản hồi có stale-while-revalidate được gửi đến một máy khách trong tối đa SECONDS trong khi quá trình xác thực lại diễn ra không đồng bộ. |
must-revalidate |
Không áp dụng | Nội dung phản hồi có must-revalidate sẽ được xác thực lại bằng máy chủ gốc sau khi hết hạn. Các phản hồi có chỉ thị này sẽ không được phân phát khi đã cũ. |
proxy-revalidate |
Nội dung phản hồi có proxy-revalidate sẽ được xác thực lại bằng máy chủ gốc sau khi hết hạn. Các phản hồi có chỉ thị này sẽ không được phân phát khi đã cũ. |
|
no-transform |
Không áp dụng | Cloud CDN không áp dụng bất kỳ quy tắc chuyển đổi nào. |
Đo lường lưu lượng truy cập được lưu vào bộ nhớ đệm và không được lưu vào bộ nhớ đệm
Biểu đồ "Cloud CDN – Băng thông đi" trong thẻ Mức sử dụng của bảng điều khiển App Hosting cho biết số byte được phân phát đã lưu vào bộ nhớ đệm và chưa lưu vào bộ nhớ đệm, đồng thời có một dấu cho mỗi lần triển khai. Bạn có thể sử dụng biểu đồ này để đo lường mức độ hiệu quả của các nỗ lực tối ưu hoá bộ nhớ đệm.