Mevcut 12 kuralın yeni player sistemiyle uyumluluk kontrolü
Cloudflare, siteyle kullanıcı arasında duran bir ara katman. Dosyaları kendi sunucularında saklayıp (cache) kullanıcılara daha hızlı sunar. 12 kural var — hangi dosyaların cache'leneceğini, hangilerinin her seferinde sunucudan alınacağını belirliyor.
Sorun: HLS playlist dosyaları (.m3u8) her kullanıcı için farklı güvenlik anahtarları içeriyor. Ama Cloudflare bunları 1 yıl cache'liyor — bir kullanıcının anahtarı başka kullanıcıya sunulabilir veya süresi dolmuş anahtar sunulabilir.
Çözüm: Playlist dosyalarını cache'den çıkar, sadece ses parçalarını (.ts segment) cache'le. Zaten P2-10 optimizasyonu ile master.m3u8 artık HTTP isteği bile yapmıyor (inline gömülü).
| Endpoint | Origin Header | CF Kuralı | Durum |
|---|---|---|---|
| /api/.../stream (POST) | Laravel default | K3: API bypass | ✅ |
| /api/.../serve (GET) | max-age=31536000 | K2: MP3 1yıl | ✅ |
| /audio/songs/{id}/{exp}/{sig} | max-age=31536000, immutable | K7: Audio 1yıl | ✅ |
| /hls/.../segment-XXX.ts | max-age=31536000, immutable | K8: HLS 1yıl | ✅ |
| /hls/.../playlist.m3u8 | no-cache | K8: 1yıl ❌ | ÇAKIŞMA |
| /hls/.../master.m3u8 | no-cache | K8: 1yıl ❌ | ÇAKIŞMA |
| /hls-key/muzibu/songs/{id} | max-age=86400, immutable | Hiçbiri ⚠️ | EKSİK |
Livewire AJAX istekleri cache'lenmemeli. Değişiklik gerekmiyor.
/api/muzibu/songs/*/serve — MP3 dosyaları değişmez.
K3'ten (API bypass) ÖNCE geldiği için spesifik kural geçerli. Sıralama kritik — değiştirme!
Stream API, login, tüm API istekleri cache'lenmez. P2-10 inline master bu endpoint üzerinden gelir — doğru.
Dinamik sayfalar cache'lenmez. Değişiklik gerekmiyor.
/audio/songs/{id}/{expires}/{sig} — CDN-friendly MP3 endpoint.
URL'de expires + signature var, aynı URL = aynı içerik. 1 yıl doğru.
Origin: max-age=31536000, immutable — uyumlu.
Mevcut koşul: /hls/ AND (.ts OR .m3u8 OR .key)
.ts segment → Origin: max-age=31536000, immutable → CF 1yıl → Uyumlu.m3u8 playlist → Origin: no-cache → CF 1yıl override → ÇAKIŞMA!.key → Artık kullanılmıyor, key'ler /hls-key/ üzerinden sunuluyor → GereksizProblem:
Playlist'ler (.m3u8) içinde signed encryption key URL'leri var. Her kullanıcıya özel expires + token + sig parametreleri içerir. CF "Ignore cache-control" modunda origin'in no-cache header'ını görmezden gelip 1 yıl cache'liyor.
Pratikte CF cache key = full URL (query params dahil) olduğu için her kullanıcı farklı cache key alır → şu an çalışıyor. Ama gereksiz cache kirliliği yaratıyor ve edge case'lerde sorun çıkarabilir.
Önerilen düzeltme:
Kuralı ikiye böl:
.key pattern kaldırılabilir — artık kullanılmıyor.
Fontlar değişmez. 1 yıl doğru.
Edge TTL 1 ay var ama Browser TTL ayarlanmamış → her sayfa açılışında CF'ye istek gidiyor. Browser TTL = 7 gün eklenebilir (opsiyonel, öncelik düşük).
player-core.js → versioned_asset() ile yükleniyor:
?v=1709312345 (file timestamp). Dosya değişince timestamp değişir →
farklı cache key → anında güncellenir. 7 gün sorun yok.
Albüm kapakları, avatarlar vb. Edge 1 ay, browser 7 gün. Uyumlu.
/hls-key/muzibu/songs/{id}?expires=...&token=...&sig=...Cache-Control: public, max-age=86400, immutableŞu an hiçbir CF kuralına denk gelmiyor. CF varsayılan davranışa göre origin header'ı takip ediyor (86400s = 1 gün cache). Signed URL sayesinde her kullanıcı farklı cache key alır — pratikte sorun yok.
Öneri (opsiyonel):
Açıkça tanımlamak istersen: /hls-key/ → Respect origin (max-age=86400)
veya Bypass cache. Key 16 byte'lık küçük bir dosya, cache kazancı mininal.
Mevcut K8 (/hls/ AND (.ts OR .m3u8 OR .key) → 1 yıl)
Thumbmaker'a Browser TTL = 7 gün ekle. Gereksiz origin isteklerini azaltır.
Şu an varsayılan davranışla çalışıyor. Açıkça tanımlamak istersen bypass veya respect origin ekle.
| # | Kural | Pattern | Cache | Edge | Browser |
|---|---|---|---|---|---|
| 1 | Livewire No Cache | starts_with /livewire | Bypass | — | — |
| 2 | MP3 Audio Cache | /api/.../serve | 1 yıl | 1 yıl | 1 yıl |
| 3 | API No Cache | starts_with /api | Bypass | — | — |
| 4 | Admin No Cache | starts_with /admin | Bypass | — | — |
| 5 | Dashboard No Cache | /dashboard/* | Bypass | — | — |
| 6 | User Pages No Cache | 5 kullanıcı sayfası | Bypass | — | — |
| 7 | Audio Route Cache | /audio/songs/ | 1 yıl | 1 yıl | 1 yıl |
| 8a | HLS Segments Cache (YENİ) | /hls/ AND .ts | 1 yıl | 1 yıl | 1 yıl |
| 8b | HLS Playlists No Cache (YENİ) | /hls/ AND .m3u8 | Bypass | — | — |
| 9 | Fonts | .woff/.woff2/.ttf/.otf/.eot | 1 yıl | 1 yıl | 1 yıl |
| 10 | Thumbmaker (GÜNCELLENDİ) | /thumbmaker/ | 1 ay | 1 ay | 7 gün |
| 11 | CSS/JS Assets | *.css* / *.js* | 7 gün | 7 gün | 7 gün |
| 12 | Static Files | /storage/ | 1 ay | 1 ay | 7 gün |