2013-01-03 28 views
5

के साथ अनुरोध मैं सर्वर पर एक अनुरोध करने का प्रयास कर रहा हूं, जो कैश उद्देश्यों के लिए एटाग के साथ प्रतिक्रिया करता है। मैंने इसके लिए निम्नलिखित कोड लिखा है, लेकिन इन कॉलों की प्रतिक्रिया यादृच्छिक रूप से अधिकतर समय है यानी कभी-कभी प्रतिक्रिया स्थिति कोड 200 होता है और कुछ बार 304 (अपेक्षित) होता है। क्या मैं अपने कोड में कुछ गलत कर रहा हूं या क्या एएफनेटवर्किंग के साथ कुछ विशिष्ट है जो मुझे ध्यान में रखना चाहिए।AFNetworking - ETag

NSURL *url = [NSURL URLWithString:@"http://ia.media-imdb.com/images/M/[email protected]@._V1._SY90_.jpg"]; 
    NSMutableURLRequest *aRequest = [NSMutableURLRequest requestWithURL:url]; 
    [aRequest setValue:@"\"61-smtLpBSL_SY90_#1\"" forHTTPHeaderField:@"If-None-Match"]; 
    NSLog(@"headers: %@", aRequest.allHTTPHeaderFields); 
    AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:aRequest imageProcessingBlock:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
    NSLog(@"%@ %d", response.allHeaderFields, response.statusCode); 
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 
    NSLog(@"Request failed with error: %@", error);  
    }]; 
    [operation start]; 
+2

क्या आप कभी इस के नीचे पहुंच गए थे? – andygeers

उत्तर

0

मैंने आपके कोड की कोशिश की है और मुझे स्थिति 200 मिलती है - ठीक है जो ऐसा होना चाहिए।

कोड 304 - संशोधित नहीं किया गया, मैं प्राप्त करने में सक्षम नहीं था। मैंने कई बार तेजी से और धीमी गति से चलने की कोशिश की है लेकिन मुझे हमेशा प्रतिक्रिया के रूप में 200 मिलते हैं।

क्या आपके पास अधिक जानकारी होती है जब आपको प्रतिक्रिया कोड के रूप में 304 मिलते हैं?

304 प्रतिक्रिया कोड आम तौर पर इसका अर्थ है कि सामग्री को संशोधित नहीं किया गया है और आपको मूल अनुरोध प्राप्त करना चाहिए जिसमें 200 प्रतिक्रियाएं शामिल हैं।

यहाँ आप ETag बारे में कुछ और पढ़ सकते हैं: ETag vs Header Expires

+0

यही वह है जो मुझे सामना कर रहा है, एक यादृच्छिक 304. मुझे अभी भी यकीन नहीं है कि मुझे 200 में क्यों मिलेगा जब मैं अनुरोध में सही Etag भेज रहा हूं। अधिक भ्रमित बात यह है कि कोड विकी यूआरएल पर पूरी तरह से काम करता है जैसे: http://upload.wikimedia.org/wikipedia/en/2/27/AScannerDarkly%281stEd%29.jpg संदर्भ: [w3.org] (http: //www.w3.org/Protocols/rfc2616/rfc2616-sec14.html) –

+0

इसके अलावा, जिस सर्वर टीम के साथ मैं काम कर रहा हूं, उसने केवल इटाग को लागू किया है। वे संसाधन निर्माण के लिए HTTP-दिनांक नहीं भेजते हैं, इसलिए एक्सपियर हेडर का उपयोग नहीं कर सकते .. –

4

मैं एक ही समस्या थी, मैं

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] 
                   cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
                  timeoutInterval:60]; 
+0

वह कैश पॉलिसी लागू नहीं किया गया है। enum { NSURLRequestUseProtocolCachePolicy = 0, NSURLRequestReloadIgnoringLocalCacheData = 1, NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // लागू नहीं किया गया NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, NSURLRequestReturnCacheDataElseLoad = 2, NSURLRequestReturnCacheDataDontLoad = 3, NSURLRequestReloadRevalidatingCacheData = 5, // लागू नहीं किया गया }; टाइपपीफ NSUInteger NSURLRequestCachePolicy; –

+0

धन्यवाद, कैश नीति समस्या थी। जो भी डिफ़ॉल्ट नीति है, वह मेरे etag को अनदेखा कर दिया गया है। –

+0

NSURLRequestReloadIgnoringLocalCacheData ठीक है, भी –

0

के मेरे अनुरोध को बदलकर इसे ठीक करने में कामयाब मैं भी ETag साथ एक समस्या थी तर्क और AFNetworking। मेरी समस्या सिर्फ cachePolicy सही तरीके से सेट नहीं था ...

var manager = AFHTTPRequestOperationManager() 
    manager.requestSerializer = AFHTTPRequestSerializer() 
    manager.requestSerializer.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData 
    manager.requestSerializer.setValue(etag, forHTTPHeaderField: "If-None-Match") 
    manager.GET(fullPath, parameters: parameters, success: {}, failure: {})) 

मुझे आशा है कि यह किसी को मदद मिलेगी!