2016-02-24 6 views
5

मेरे पास मेरे वेबसर्वर में एक फ़ाइल है और मैं इसे अपने ऐप पर डाउनलोड कर रहा हूं हर बार जब मैं इसे एक्सेस करता हूं क्योंकि यह संभव है कि फ़ाइल सामग्री बदली जा सकती है लेकिन यदि यह बदली गई है मैं उस समय डाउनलोड करना चाहूंगा, इसलिए बैंडविड्थ को बचाया जा सकता है और सौभाग्य से यह है कि यह ETag और यदि कोई नहीं- मैचशीर्षलेख फ़ील्ड के लिए हैं।ईटाग और यदि-कोई नहीं-मिलान HTTP शीर्षलेख काम नहीं कर रहे हैं

  • जब मैं एक अनुरोध पहली बार बनाने के लिए, मैं ETag HTTP प्रतिसाद शीर्षलेख

First time request to the file

  • अनुवर्ती अनुरोधों में से उस फ़ाइल मैं था डाउनलोड करने के लिए पुनः प्राप्त Etagके लिए मूल्य संलग्न करें यदि कोई-नहीं-मैच हेडरफ़ील्ड ताकि कोई परिवर्तन न हो तो मुझे HTTP प्रतिक्रिया स्थिति कोड 304 मिलेगा या फिर फ़ाइल में कोई बदलाव होने पर मुझे 200 मिलेंगे।

    Second time request for same file

नोट:

जब मैं क्रोम में उन्नत बाकी ग्राहक आवेदन में ऊपर के चरणों की कोशिश यह ठीक काम करता है के रूप में यह माना जाता है लेकिन जब मैं में है कि कोशिश आईओएस मुझे हमेशा प्रतिक्रिया कोड 200 मिलता है लेकिन इसे बाद के अनुरोधों के लिए मुझे 304 देना चाहिए था। वैकल्पिक ({URL: http://10.12.1.101/Etag/ringtone1.mp3} {स्थिति कोड: 200, हेडर { "Accept-

यहाँ मैं का उपयोग

var request1 = NSMutableURLRequest(URL:NSURL(string: "http://10.12.1.101/Etag/ringtone1.mp3")!) 
let Etagvalue="\"36170-52c1cc36d9b40\"" 
var session1 = NSURLSession.sharedSession() 
request1.HTTPMethod = "GET" 
var err: NSError? 
request1.addValue(Etagvalue, forHTTPHeaderField: "If-None-Match") 

var task = session1.dataTaskWithRequest(request1, completionHandler: {data, response, error -> Void in 
     print("response: \(response)") 

}) 

यहाँ प्रतिक्रिया

प्रतिक्रिया है नमूना कोड है रेंज "= बाइट्स; कनेक्शन =" Keep-Alive "; " सामग्री-लंबाई "= 221552; " सामग्री-प्रकार "=" ऑडियो/एमपीईजी "; दिनांक =" बुध, 24 फ़रवरी 2016 14:57:53 GMT"; Etag = "\" 36170-52c1cc36d9b40 \ ""; "Keep-Alive" = "टाइमआउट = 5, अधिकतम = 100"; "अंतिम संशोधित" = "शुक्र, 1 9 फरवरी 2016 10:15:33 जीएमटी"; सर्वर = "अपाचे/2.4.16 (यूनिक्स) PHP/5.5.29"; }})

मैं यहां क्या गलत कर रहा हूं?

+1

हमें उत्पन्न अनुरोध दिखाएं। जैसे प्रॉक्सी सर्वर का उपयोग करना (उदा। चार्ल्स) –

+0

@ दाईज-दंजन - अचानक यह काम करना शुरू कर दिया! मैं अनुमान नहीं लगा सका कि यह असंगतता क्यों! –

+0

@ दाईज-दजन - क्या ई-टैग के लिए ..server side कॉन्फ़िगरेशन के अलावा काम करने की कोई निर्भरता है? मेरी उंगलियां अभी भी पार हो गई हैं कि यह कैसे काम करना शुरू कर दिया? –

उत्तर

5

मुझे एक ही समस्या का सामना करना पड़ा है। मैंने पाया है कि यह cachePolicy की वजह से है। आप इसे स्थापित करने के लिए इस प्रकार की जरूरत है:

request.cachePolicy = .ReloadIgnoringLocalAndRemoteCacheData 

और तुम ठीक हो जाएगा

+0

अक्षम करने में मदद करेगी इसे उत्तर के रूप में चिह्नित किया जाना चाहिए। शानदार पकड़ो! –

+0

@ कॉन्स्टेंटिनलोगिनोव धन्यवाद भाई! –

+0

यह मेरे लिए काम किया। क्या आप इसे समाधान के रूप में चिह्नित कर सकते हैं? – Naknut

0

CachePolicy नामकरण सम्मेलन भ्रामक है और बेहतर अभी तक यह वास्तव में उनमें से कुछ को लागू नहीं करता है ...

यह आलेख उन्हें अच्छी तरह से बताता है। http://nshipster.com/nsurlcache/

इसके अलावा, यदि आप कैश नीति को UseProtocolCachePolicy का उपयोग करने देते हैं तो आपके NSURL सत्र को कैश से उत्पन्न प्रतिक्रिया के साथ स्थिति कोड 200 प्राप्त होगा।

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