Tarih ve yaş başlıklarına göre yanıtları önbelleğe alma
OkHttp'de yanıtları önbelleğe almadığımız ve her seferinde sunucuya isabet ettiğimiz bazı davranışlar görüyoruz. Bununla birlikte, yanıtın gelecekte bir Expires süresi vardır, bu nedenle ideal olarak önbelleğe alınacaktır.
Yanıtta gördüğümüz başlıkların basit bir örneğini burada bulabilirsiniz (istek gönderildi ve yanıt alındı Sat, 16 Jan 2021 00:40:36 GMT
):
date: Sat, 16 Jan 2021 00:40:36 GMT
age: 6
expires: Sat, 16 Jan 2021 00:40:40 GMT
last-modified: Sat, 16 Jan 2021 00:40:30 GMT
CacheStrategy'ye baktığımda gördüğüm kadarıyla sorun, son kullanma süresinin geçip geçmediğini görmek için tarih + yaşı bir araya getirmesidir. Bu durumda, 00:40:36 + 6 = 00:40:42 > 00:40:40
önbelleğe eklenmez.
Bu yüzden ideal olarak, ya yanıt tarihinin en son değiştirilen tarihe eşit olacağını (bu durumda Cmt, 16 Ocak 2021 00:40:30 GMT) ya da son değiştirilen yerine kullanmak için özel bir CacheStrategy'ye ihtiyacımız olacağını düşünüyorum. bu hesaplamalar için tarih.
Herhangi birinin kötü varsayımlarda bulunup bulunmadığıma dair herhangi bir fikri varsa veya yukarıdaki seçeneklerden biri tercih edildiyse, lütfen bana bildirin. Tarih / yaş başlıklarının bazı özelliklerine baktım ve bu senaryoda ne olması gerektiği benim için biraz belirsiz.
Ayrıca OkHttp'de önbelleğe alma davranışında hata ayıklamayı biraz zor buldum, şu anda sadece onu izlemeye çalışmak için koşullu kesme noktaları kullanıyorum, ancak daha iyi bir fikri olan varsa bunu da takdir ederim.
Yanıtlar
expires
Başlığı, bir max-age yönergesi ayarlayan bir Cache-Control başlığıyla değiştirin :
Cache-Control: max-age=86400
Bu, OkHttp'nin yanıtı ne zaman sunulduğuna bakılmaksızın 24 saat boyunca önbelleğe almasına neden olur. Sona erme başlığı sorunluydu çünkü CloudFlare bunu bir süre değil, belirli bir sona erme süresi olarak değerlendirdi.
max-age
Seçtiğiniz bir "Cache-Control" başlığını kullanmayı denemenizi tavsiye ederim .
Bunu yapmamın ana nedeni, bunun resmi belgelerden bir örnekte de gösterilmesidir, bkz: https://square.github.io/okhttp/interceptors/#rewriting-responses
.header("Cache-Control", "max-age=60")
Bunu yapmanın tercih edilen yolu açık bir şekilde arka uçtadır. Arka ucu değiştiremezseniz, sanırım bir önleme ikinci bir seçenek olacaktır. Bunun tavsiye edilmeyen son seçenek olduğunu unutmayın.
Arka ucunuza ek olarak, cloudflare'un kendisinin sağladığı seçeneklere de bir göz atacağım: https://support.cloudflare.com/hc/en-us/articles/360021806811-Getting-Started-with-Cloudflare-Caching