تكرار السؤال: …
الإجابة المختصرة
بتهيئة كائن okhttp3.Cache مع مسار وحجم محدد، لتقوم OkHttp تلقائيًا بإرسال If-None-Match واستقبال 304 Not Modified دون إعادة تنزيل البيانات.
الشرح
يحترم OkHttp ترويسات Cache-Control القادمة من السيرفر. عند استقبال ETag، يرسل العميل هذا المعرف في الطلبات اللاحقة؛ إذا لم تتغير البيانات، يعيد السيرفر كود 304 مع حمولة فارغة، فتقرأ OkHttp البيانات فورًا من القرص المحلي، مما يوفر استهلاك باقة البيانات وطاقة البطارية وزمن الاستجابة.
مثال بالكود
val cacheSize = 10L * 1024 * 1024 // 10 MB
val httpCache = Cache(File(context.cacheDir, "http_cache"), cacheSize)
val client = OkHttpClient.Builder()
.cache(httpCache)
.build()أخطاء شائعة
- وضع ملفات الـ HTTP Cache في مسار التخزين الداخلي الدائم بدلاً من context.cacheDir الذي يحرره النظام عند امتلاء الذاكرة.