Tarih ve yaş başlıklarına göre yanıtları önbelleğe alma

Jan 17 2021

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

2 JesseWilson Jan 22 2021 at 11:32

expiresBaş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.

1 Menelaos Jan 26 2021 at 01:57

max-ageSeç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