Memahami Cache Image di Browser dan Cloudflare

Dalam proses optimasi performa website, salah satu aspek paling penting adalah caching. Banyak developer sering bertanya: apakah file gambar yang dimuat berasal dari cache browser ๐Ÿ–ฅ๏ธ, dari Cloudflare โ˜๏ธ, atau justru selalu diminta ulang ke server?

Artikel ini membahas secara mendalam cara kerja cache, cara mengeceknya di Chrome, serta bagaimana mengatur header cache di PHP agar optimal dan aman untuk production.

 

๐Ÿง  1. Memahami Dua Jenis Cache: Browser vs CDN

๐Ÿ–ฅ๏ธ A. Browser Cache

Browser cache adalah file yang disimpan langsung di perangkat pengguna. Jika gambar sudah tersimpan dan belum melewati waktu kadaluarsa (max-age), browser tidak akan meminta ulang file ke server.

Ciri khas di Chrome DevTools:

  • Status Code: 200 (from disk cache)
  • Status Code: 200 (from memory cache)

Artinya file diambil langsung dari penyimpanan lokal browser. โšก

โ˜๏ธ B. Cloudflare Cache (CDN Cache)

Cloudflare adalah CDN (Content Delivery Network) yang menyimpan file statis di edge server mereka. Jika file tersedia di edge terdekat, maka request tidak sampai ke origin server.

Ciri khas di Response Headers:

  • cf-cache-status: HIT โœ… → file diambil dari cache Cloudflare
  • cf-cache-status: MISS โŒ → belum ada di cache
  • cf-cache-status: EXPIRED โณ → kadaluarsa
  • cf-cache-status: BYPASS ๐Ÿšซ → tidak di-cache
  • server: cloudflare ๐ŸŒ → request melewati Cloudflare

๐Ÿ”Ž 2. Cara Mengecek Cache di Chrome

  1. Buka halaman website
  2. Klik kanan → Inspect
  3. Pilih tab Network
  4. Filter berdasarkan Img
  5. Klik salah satu gambar
  6. Buka tab Headers

Di bagian Response Headers, perhatikan:

  • Apakah ada cf-cache-status? โ˜๏ธ
  • Apakah ada Cache-Control? ๐Ÿ“ฆ
  • Status Code menunjukkan from disk cache? ๐Ÿ’พ

Untuk memastikan bukan cache browser, lakukan Hard Reload:

  • Windows: Ctrl + Shift + R
  • Mac: Cmd + Shift + R

โš™๏ธ 3. Mengatur Header Cache di PHP

Contoh implementasi:

$expire_seconds = 604800; // 7 hari
header("Cache-Control: public, max-age={$expire_seconds}, must-revalidate, proxy-revalidate, immutable");
header("Pragma: public");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $expire_seconds) . " GMT");

๐Ÿ“– Penjelasan Directive

  • public → Boleh di-cache oleh browser dan CDN
  • max-age → Masa berlaku cache (dalam detik)
  • must-revalidate → Harus validasi ulang setelah expire
  • proxy-revalidate → Sama seperti must-revalidate untuk proxy/CDN
  • immutable → Selama belum expire, browser tidak akan cek ulang meskipun refresh ๐Ÿ”’

๐Ÿ“Œ 4. Kapan Menggunakan Immutable?

Gunakan immutable hanya jika file memiliki versi unik, misalnya:

  • image.abc123.jpg
  • app.js?v=20260301

Jika file tidak menggunakan versioning, penggunaan immutable bisa menyebabkan user tidak mendapatkan update terbaru hingga masa cache habis. โš ๏ธ


โ“ 5. Mengapa Cloudflare Kadang Tidak Cache?

Beberapa penyebab umum:

  • Header Cache-Control: private ๐Ÿšซ
  • Ada cookie atau session aktif ๐Ÿช
  • Ada header Authorization ๐Ÿ”
  • Rule Cloudflare tidak aktif โš™๏ธ
  • File dianggap dynamic ๐Ÿ”„

Pastikan juga tidak ada konfigurasi NGINX atau Apache yang menimpa header dari PHP.


๐Ÿ† 6. Best Practice untuk Production

๐Ÿ“‚ Untuk File Upload Dinamis

header("Cache-Control: public, max-age=604800");

Gunakan max-age sederhana tanpa must-revalidate dan immutable. Lebih stabil dan aman untuk file yang bisa berubah.

๐Ÿ“ฆ Untuk File Static Versioned (CSS/JS/Image Build)

header("Cache-Control: public, max-age=31536000, immutable");

Set 1 tahun + immutable, pastikan file menggunakan hash versioning.


๐Ÿงช 7. Validasi Menggunakan Curl

curl -I https://domain.com/path/image.jpg

Perhatikan apakah muncul:

cf-cache-status: HIT

Jika muncul HIT, berarti file benar-benar disajikan dari Cloudflare. ๐ŸŽฏ


๐ŸŽฏ Kesimpulan

Caching adalah kombinasi dari:

  • Konfigurasi server (NGINX/Apache/PHP) ๐Ÿ–ฅ๏ธ
  • Header HTTP yang benar ๐Ÿ“ก
  • Konfigurasi CDN (Cloudflare) โ˜๏ธ
  • Strategi versioning file ๐Ÿ”ข

Dengan memahami cara kerja browser cache dan CDN cache, developer dapat:

  • Meningkatkan performa website secara signifikan โšก
  • Mengurangi beban server ๐Ÿ’ช
  • Mengontrol update asset dengan lebih presisi ๐ŸŽ›๏ธ
  • Menghindari bug akibat cache lama ๐Ÿž

Optimasi cache yang tepat bukan hanya soal kecepatan, tetapi juga tentang arsitektur sistem yang matang, scalable, dan profesional. ๐Ÿ‘จ‍๐Ÿ’ปโœจ

The power of documents

Kami sajikan dengan bahasa yang mudah dengan disertai command line yang bisa di copy-paste sehingga memudahkan untuk melakukan modifikasi command line