2016-09-28 9 views
9

मैं रेट्रोफिट का उपयोग कर रहा हूं, जिसे कैश के साथ ओकेएचटीपी का उपयोग करने के लिए कॉन्फ़िगर किया गया है। मैं इस एपीआई को कॉल कर रहा हूं: https://api.github.com/users/bod/repos जो Etag और Cache-Control: public, max-age=60, s-maxage=60 शीर्षलेख दोनों देता है।रेट्रोफिट: सर्वर ईटाग और कैश-कंट्रोल दोनों देता है: अधिकतम आयु = 60। यदि अनुरोध <60s है तो कैश का उपयोग नहीं किया जाना चाहिए?

मैं 60 सेकंड से कम समय में दो अनुरोध करता हूं, इसलिए मैं उम्मीद कर रहा था कि दूसरे नंबर पर कोई भी नेटवर्क न करें और Cache-Control निर्देश के अनुसार कैश का उपयोग करें। लेकिन यह वह नहीं है जो मैं देखता हूं।

मुझे अनुमान है कि यह Etag निर्देश प्राथमिकता लेता है?

क्या यह सही/सामान्य/अपेक्षित व्यवहार है?

+0

आप जानकारी जोड़ कर सके मामूली बात है कि कैसे आप सेटअप पुराना वापस में कैशिंग? – tynn

उत्तर

2

RFC2068 Hypertext Transfer Protocol -- HTTP/1.1 1 99 7 में प्रकाशित ETag और Cache-Control शीर्षलेख दोनों विवरण। बाद में दस्तावेज़, RFC2616 और RFC7232 दोनों ETag शीर्षलेख पर विस्तारित होते हैं और इसका उपयोग If-None-Match के साथ कैसे किया जा सकता है।

एक कैश एक बासी प्रविष्टि है कि यह एक क्लाइंट के अनुरोध के एक प्रतिक्रिया के रूप में उपयोग करना चाहते हैं होता है, यह पहली बार है मूल सर्वर के साथ जांच करने के लिए:

RFC2616, 13.3 Validation Model अपने प्रश्न का उत्तर होता है (या संभवतः एक ताजा प्रतिक्रिया के साथ एक मध्यवर्ती कैश) पर देखें कि क्या इसकी कैश प्रविष्टि अभी भी प्रयोग योग्य है या नहीं। हम इसे "मान्य" कैश प्रविष्टि कहते हैं।

फिर यह अंतिम-संशोधित तिथियों के साथ एंटीटी टैग (ईटीएजी) कैश वैधकर्ता समेत सत्यापन सत्यापन सूची पर जाता है। एक बाँध कैश प्रविष्टि वह है जहां maxage या उस संसाधन के लिए अन्य समाप्ति तंत्र हुआ है।

तो आपके सिस्टम का व्यवहार अप्रत्याशित है। स्थानीय कैश बिल्कुल काम कर रहा है या नहीं, यह सत्यापित करने के लिए ईटीएजी हेडर के साथ और बिना परीक्षण सामग्री के लायक हो सकता है।

0

क्या आपने रेट्रोफिट में कैशिंग को सही तरीके से स्थापित किया था? कुछ की तरह:

// create the cache 
    OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
    builder.cache(new Cache(new File(context.getCacheDir(), "ok-http-cache"), 
      1024 * 1024 * 5)); // 5 MB cache 


    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_URL) 
      .client(builder.build()) // set the cache created above 
      .build(); 
    api = retrofit.create(Api.class); // Api is the interface with the @GET, @POST annotations 

यह यदि आप इसे जानते हैं, लेकिन आप अपने कार्यान्वयन का उल्लेख नहीं था

+0

हाँ, मैंने वास्तव में किया था :) – BoD

+0

@ vedant1811 क्या यह नेटवर्क कैशिंग माना जाता है? यह किस तरह का कैशिंग है जिसे विशेष रूप से बुलाया जाता है और उपयोग केस क्या है? – toobsco42

+0

@ toobsco42 यह क्लाइंट साइड कैशिंग है- उसी प्रकार की अनावश्यक नेटवर्क कॉल को रोकने के लिए उपयोग किया जाता है। लेकिन मैं कंप्यूटर विज्ञान में कोई विशेषज्ञ नहीं हूं – vedant1811

संबंधित मुद्दे

 संबंधित मुद्दे