2012-07-03 18 views
7

मैंने एक पुरानी वेब सेवा लिखी है जो केवल उपकरणों द्वारा उपभोग की जाती है, ब्राउज़र कभी नहीं। डिवाइस मालिक के मौजूदा घरेलू राउटर के माध्यम से इंटरनेट तक पहुंचते हैं और राउटर के माध्यम से HTTP अनुरोधों को हर 30 सेकंड के रूप में भेजकर वेब सेवा के साथ संवाद करते हैं। ये अनुरोध अधिकतर "मतदान" अनुरोध हैं कि यह देखने के लिए कि क्या वेब सेवा में डिवाइस के लिए कोई नई जानकारी है या नहीं।मेरे वेब सेवा का उपयोग करने वाले ग्राहक अपने आईएसपी के पारदर्शी प्रॉक्सी कैश को कैसे बाईपास कर सकते हैं ताकि उनके अनुरोध मेरे सर्वर तक पहुंच सकें?

मैं किसी भी आईएसपी पारदर्शी प्रॉक्सी को अनुरोध को रोकने और कैश प्रतिक्रिया लौटने से रोकना चाहता हूं। मैंने पढ़ा है कि ऐसा करने का एक तरीका प्रॉक्सी को बेवकूफ़ बनाने के अनुरोध के यूआरएल के अंत में यादृच्छिक क्वेरी स्ट्रिंग को जोड़ना है, यह एक अनूठा अनुरोध है। उदाहरण के लिए:

http://webservicedomain.com/poll/?randomNumber=384389 

मेरे पास ऐसा करने की क्षमता है, लेकिन क्या यह सबसे अच्छा तरीका है? किंडा एक हैक की तरह लग रहा है।

उत्तर

14

आपको इसे प्राप्त करने के लिए HTTP's Cache-Control header का उपयोग करना चाहिए।

जवाब में आप भेजना चाहिए:

Cache-Control: private, must-revalidate, max-age=0 
  • निजी - यह दर्शाता है कि सभी या प्रतिक्रिया संदेश का एक भाग एक एकल उपयोगकर्ता के लिए लक्षित है और नहीं एक साझा कैश द्वारा कैश किया जाना चाहिए।
  • अधिकतम आयु = 0 - इंगित करता है कि ग्राहक उस प्रतिक्रिया को स्वीकार करने के इच्छुक है जिसकी उम्र 0 सेकंड से अधिक नहीं है। अर्थात। प्रतिक्रिया तुरंत बेवकूफ हैं।
  • को फिर से संशोधित करना चाहिए - जब कैश द्वारा प्राप्त प्रतिक्रिया में उपस्थित होता है, तो उस कैश को बाद में अनुरोध के जवाब में मूल सर्वर के साथ इसे पुन: वैध किए बिना किसी भी अनुरोध का जवाब देने के लिए स्टेल बनना चाहिए।

तुम भी विरासत HTTP के लिए एक Pragma header भेज shoud/1.0 मध्यस्थ सर्वर:

Pragma: no-cache 

संबंधित पढ़ने:

+0

तो आपको नहीं लगता कि मुझे 'कैश-कंट्रोल' हेडर के मान में 'नो-कैश' और 'नो-स्टोर' शामिल करने की आवश्यकता है? –

1

आप एन्क्रिप्टेड कनेक्शन का उपयोग करने का प्रयास कर सकते हैं। मुझे लगता है कि कैश प्रॉक्सी एन्क्रिप्टेड संचार से प्रतिक्रियाओं को संग्रहित नहीं करना चाहिए।

एक समाधान आपके सर्वर पर HTTPS को कॉन्फ़िगर करने के लिए हो सकता है, कोई अन्य आपके HTTP सर्वर पर अनुरोध भेजने के लिए one of SSL proxies का उपयोग करने के लिए क्लाइंट को कॉन्फ़िगर करने के लिए हो सकता है।

+0

HTTPS मेरे परिदृश्य के लिए एक विकल्प नहीं है।प्रति मिनट हजारों अनुरोधों की अनुमति देने के लिए यह सरल HTTP होना चाहिए। एचटीटीपीएस के लिए आवश्यक हैंडशेक प्रक्रिया मुझे लगता है कि बहुत अधिक ओवरहेड बना देगा। –

1

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

आप इस को देखने के लिए चाहते हो सकता है - discussion on caching

तो अतिरिक्त पैरामीटर पास भी बचा जा सकता है।