Buka konsol

Mengelola perilaku cache

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

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

Namun, karena layanan Cloud Functions dan Cloud Run menghasilkan konten secara dinamis, konten untuk URL tertentu dapat bervariasi berdasarkan hal-hal seperti input 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 di cache selama setidaknya periode waktu yang singkat.

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

Pelajari lebih lanjut perilaku penyimpanan di cache dalam dokumentasi developer web Google.

Menyetel Cache-Control

Fitur utama yang akan 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 di cache. Dalam fungsi Anda, tetapkan 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 maupun server perantara (artinya CDN untuk Firebase Hosting) dapat menyimpan konten di cache.

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

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

Untuk max-age dan s-maxage, setel nilainya ke waktu terlama Anda bisa menoleransi penerimaan konten usang oleh pengguna. Jika halaman berubah setiap beberapa detik, gunakan nilai waktu yang kecil. Namun, jenis konten lain dapat disimpan di cache dengan aman selama berjam-jam, berhari-hari, atau bahkan berbulan-bulan.

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

Kapan konten yang disimpan di cache ditampilkan?

Browser dan CDN menyimpan konten di cache berdasarkan:

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

Header Vary

Header Vary menentukan header permintaan mana yang sebaiknya digunakan untuk memberikan respons yang tepat (apakah konten yang disimpan di cache valid atau apakah konten tersebut harus divalidasi ulang dengan server asal).

Sering kali, Anda tidak perlu mengkhawatirkan header Vary. Firebase Hosting otomatis menetapkan header Vary yang tepat dalam respons Anda untuk situasi yang 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 identik dengan header X-My-Custom-Header 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 akan otomatis dijadikan sebagai bagian dari kunci cache, sehingga tidak akan ada dua pengguna dengan cookie berbeda yang dapat menerima respons tersimpan di cache dari pengguna satunya. Hanya gunakan cookie __session jika aplikasi Anda menampilkan konten yang berbeda sesuai dengan otorisasi pengguna.