Mengelola perilaku cache

Firebase Hosting menggunakan CDN global yang andal untuk membuat situs Anda dimuat secepat mungkin.

Setiap konten statis yang diminta secara otomatis akan disimpan dalam cache pada CDN. Jika konten situs Anda di-deploy kembali, Firebase Hosting secara otomatis akan menghapus semua konten statis yang disimpan dalam cache di seluruh CDN hingga permintaan berikutnya.

Namun, karena layanan Cloud Functions dan Cloud Run menghasilkan konten secara dinamis, konten untuk URL tertentu dapat bervariasi berdasarkan berbagai hal, seperti masukan pengguna atau identitas pengguna. Untuk mengakomodasi hal ini, permintaan yang ditangani oleh kode backend tidak disimpan di cache pada CDN secara default.

Tetapi Anda dapat mengonfigurasi perilaku penyimpanan di cache untuk konten dinamis. Misalnya, jika sebuah fungsi hanya menghasilkan konten baru secara berkala, Anda dapat mempercepat aplikasi dengan menyimpan konten yang dihasilkan dalam cache selama setidaknya periode waktu yang singkat.

Anda juga berpotensi bisa mengurangi biaya eksekusi fungsi karena konten ditayangkan dari CDN, bukan melalui fungsi yang dipicu. Baca selengkapnya tentang cara mengoptimalkan eksekusi fungsi dan layanan dalam dokumentasi Cloud Functions dan Cloud Run.

Pelajari perilaku cache lebih lanjut dalam dokumentasi developer web Google.

Menyetel Kontrol Cache

Alat utama yang Anda gunakan untuk mengelola cache konten dinamis adalah header Cache-Control. Dengan mengonfigurasi header ini, Anda dapat memberi tahu browser dan juga CDN berapa lama konten dapat disimpan dalam cache. Di fungsi Anda, setel Cache-Control seperti berikut:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

Dalam contoh header di atas, perintah ini melakukan tiga hal:

  • public — Menandai cache sebagai public. Ini berarti baik browser dan server perantara (artinya CDN untuk Firebase Hosting) dapat menyimpan konten dalam cache.

  • max-age — Memberi tahu browser dan CDN berapa lama konten dapat disimpan dalam cache. Setelah waktu yang ditetapkan berakhir, browser dan CDN harus memvalidasi ulang konten dengan server asal. Dalam contoh header, kami mengizinkan browser dan CDN menyimpan konten dalam cache selama lima menit (lihat s-maxage di bawah untuk kontrol tertentu terkait penyimpanan di cache oleh CDN).

  • s-maxage — Mengganti perintah max-age untuk penyimpanan di cache oleh CDN saja; memberi tahu CDN berapa lama konten dapat disimpan dalam cache. Setelah waktu yang ditetapkan berakhir, CDN harus memvalidasi ulang konten dengan server asal. Dalam contoh header, kami mengganti setelan max-age untuk CDN saja dan mengizinkan CDN menyimpan konten dalam cache selama sepuluh menit.

Untuk max-age dan s-maxage, tetapkan nilainya ke durasi terlama pengguna menerima konten usang, yang masih dapat Anda toleransi. Jika halaman berubah setiap beberapa detik, gunakan nilai waktu yang kecil. Namun, jenis konten lain dapat disimpan dalam cache dengan aman selama berjam-jam, berhari-hari, atau bahkan berbulan-bulan.

Anda dapat mempelajari header Cache-Control lebih lanjut di Jaringan Developer Mozilla dan di dokumentasi developer web Google.

Kapan konten yang disimpan dalam cache ditampilkan?

Browser dan CDN menyimpan konten di cache berdasarkan:

  • Hostname
  • Lokasi
  • String kueri
  • Konten header permintaan yang ditentukan di header Vary

Header Vary

Header Vary menentukan header permintaan mana yang harus digunakan untuk memberikan respons yang sesuai (apakah konten yang disimpan dalam cache valid atau tidak, atau apakah konten harus divalidasi ulang dengan server asal).

Sering kali, Anda tidak perlu mengkhawatirkan header Vary. Firebase Hosting secara otomatis menetapkan header Vary yang sesuai pada respons Anda untuk situasi umum. Hal ini termasuk memastikan bahwa cookie sesi atau header otorisasi yang Anda gunakan dijadikan sebagai bagian dari kunci cache, yang mencegah kebocoran konten secara tidak disengaja.

Dalam beberapa kasus penggunaan lanjutan, Anda mungkin memiliki header lain yang diperlukan untuk memengaruhi cache. Jika demikian, cukup setel header Vary pada respons Anda:

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

Dengan setelan ini, dua permintaan yang identik dengan header X-My-Custom-Header yang berbeda akan disimpan dalam cache secara terpisah.

Menggunakan cookie

Saat menggunakan Firebase Hosting bersama dengan Cloud Functions atau Cloud Run, cookie umumnya dihapus dari permintaan masuk. Hal ini diperlukan agar perilaku cache CDN lebih efisien. Hanya cookie __session dengan nama khusus yang diizinkan lolos ke eksekusi aplikasi Anda.

Jika ada, cookie __session secara otomatis dibuat menjadi bagian dari kunci cache, sehingga tidak mungkin ada dua pengguna dengan cookie yang berbeda menerima respons yang disimpan dalam cache dari pengguna satunya. Hanya gunakan cookie __session jika aplikasi Anda menayangkan konten yang berbeda sesuai dengan otorisasi pengguna.