मैं चार उपयोग मामलों के लिए भेजने के लिए सर्वश्रेष्ठ HTTP शीर्षलेखों को समझने की कोशिश कर रहा हूं। मैं उन शीर्षकों के साथ आने की उम्मीद कर रहा हूं जो उपयोगकर्ता एजेंट/प्रोटोकॉल संस्करण पर निर्भर नहीं हैं लेकिन मैं स्वीकार करूंगा कि अगर कुछ और फिट बैठता है। सभी यूआरएल पूरी तरह से कस्टम हैंडलर के माध्यम से लाए जाते हैं, इसलिए मैं सभी शीर्षकों को चुन सकता हूं जैसा कि मुझे पसंद है, यह मध्यवर्ती प्रॉक्सी और उपयोगकर्ता एजेंट के बारे में है। यदि संभव हो, तो यह HTTP/1.0 और HTTP/1.1 दोनों क्लाइंट के साथ संगत होना चाहिए। यदि एकाधिक समाधान मौजूद हैं, तार पर भेजे जाने पर सबसे अच्छा सबसे छोटा होगा।HTTP शीर्षलेख: कैश और इतिहास तंत्र को नियंत्रित करना
स्टेटिक सार्वजनिक सामग्री
सभी "स्टैटिक सार्वजनिक सामग्री" सामान जो HTTP वास्तव में सभी के बारे में है: यदि URL एक ही है, सामग्री एक ही है। मैं इसे आसानी से कर सकता हूं: उदाहरण के लिए, मैंने उपयोगकर्ता प्रोफ़ाइल आइकन को http://domain.com/profiles/xyz/icon/1234abcd में रखा है जहां "1234abcd" आइकन की फ़ाइल सामग्री का SHA-1 है। यदि मैं भविष्य में आइकन में बदलता हूं, तो मैं एक नया यूआरएल बनाउंगा और सभी मौजूदा रेफरर्स को संशोधित करूँगा जो नए आइकन का उपयोग करना चाहिए। यह घोषणा करने के लिए सबसे अच्छे हेडर क्या हैं कि इसे हमेशा के लिए कैश किया जा सकता है और साझा किया जा सकता है? मैं वर्तमान में लाइनों के साथ कुछ सोच रहा हूं:
Date: <current time>
Expires: <current time + one year>
क्या यह उपयोगकर्ता एजेंटों और प्रॉक्सी द्वारा कैशिंग की अनुमति देने के लिए पर्याप्त है? क्या मुझे Last-Modified
या Pragma
की आवश्यकता है?
स्टेटिक गैर-सार्वजनिक सामग्री
सभी "स्टैटिक गैर-सार्वजनिक सामग्री" सामान है कि स्थिर है, लेकिन सभी को उपलब्ध नहीं हो सकता है। वास्तव में, यह सामग्री केवल चयनित लॉग इन उपयोगकर्ताओं के लिए उपलब्ध होगी (सत्र सत्र कुकी होल्डिंग सत्र यूयूआईडी के साथ रखा जाता है)। यदि यूआरएल समान है, तो सामग्री वही है। हालांकि, प्रतिक्रिया सार्वजनिक नहीं है। एक सोशल नेटवर्क सेवा में चयनित मित्रों को साझा किया गया एक छवि एक छवि हो सकती है। मैं वर्तमान में लाइनों के साथ कुछ सोच रहा हूं:
Date: <current time>
Expires: <current time>
Cache-Control: private, max-age=<huge number>, s-maxage=0
क्या यह उपयोगकर्ता एजेंटों द्वारा कैशिंग को अनुमति देने और प्रॉक्सी अक्षम करने के लिए पर्याप्त है? क्या मुझे Pragma
चाहिए?
वाष्पशील सार्वजनिक सामग्री
सभी "वाष्पशील सार्वजनिक सामग्री" सामान है कि अस्थिर और सभी को उपलब्ध है। लॉग इन नहीं होने पर http://slashdot.org/ के फ्रंट पेज की तरह कुछ। इरादा एक गैर-बदलते यूआरएल में सामग्री को तेजी से अद्यतन करने की अनुमति देना है। ध्यान दें कि मैं उपयोगकर्ता एजेंट इतिहास तंत्र (यानी, अस्थिर पृष्ठ से कुछ क्लिक करना और फिर बैक बटन को मारना नहीं चाहता, परिणामस्वरूप सर्वर से अस्थिर पृष्ठ लाने में परिणाम नहीं देना चाहिए - हालांकि, उस लिंक पर क्लिक करना सामने वाले पृष्ठ पर जाता है सर्वर से संसाधन लाने के लिए)। मैं वर्तमान में पंक्तियों के साथ कुछ सोच रहा हूँ:
Date: <current time>
Expires: <current time>
Cache-Control: public, max-age=0, s-maxage=0
कैशिंग को रोकने के लिए, लेकिन इतिहास तंत्र (वापस बटन) की अनुमति के लिए यह पर्याप्त है? मुझे पता है कि अगर मैं Cache-Control: no-store, must-revalidate
भेजता हूं तो मैं पुनः लोडिंग को मजबूर कर सकता हूं लेकिन यह वही नहीं है जो मैं चाहता हूं क्योंकि वह बैक बटन भी तोड़ देगा। क्या मुझे Last-Modified
या Pragma
की आवश्यकता है?
भले ही यह सार्वजनिक है, शायद यह मध्यस्थ प्रॉक्सी को कैश करने की अनुमति देने के लिए समझ में नहीं आता है क्योंकि यह अस्थिर है।
वाष्पशील गैर-सार्वजनिक सामग्री
सभी "वाष्पशील गैर-सार्वजनिक सामग्री" सामान है कि अस्थिर और सब लोग (निजी) के लिए नहीं उपलब्ध है। जब आप लॉग इन होते हैं तो http://slashdot.org/ के फ्रंट पेज की तरह कुछ। इरादा एक गैर-बदलते यूआरएल में सामग्री को तेजी से अद्यतन करने की अनुमति देना है। ध्यान दें कि मैं उपयोगकर्ता एजेंट इतिहास तंत्र (यानी, अस्थिर पृष्ठ से कुछ क्लिक करना और फिर बैक बटन को मारना नहीं चाहता, परिणामस्वरूप सर्वर से अस्थिर पृष्ठ लाने में परिणाम नहीं देना चाहिए - हालांकि, उस लिंक पर क्लिक करना सामने वाले पृष्ठ पर जाता है सर्वर से संसाधन लाने के लिए)। मैं वर्तमान में पंक्तियों के साथ कुछ सोच रहा हूँ:
Date: <current time>
Expires: <current time>
Cache-Control: private, max-age=0, s-maxage=0
कैशिंग को रोकने के लिए, लेकिन इतिहास तंत्र (वापस बटन) की अनुमति के लिए यह पर्याप्त है? क्या मुझे Pragma
चाहिए?
हालात अभी भी मेरे द्वारा सुझाए गए हेडर के साथ परीक्षण की जरूरत है कि:
- सत्यापित करें कि निजी सामग्री HTTP/1.0 प्रॉक्सी के माध्यम से लीक नहीं किया जाएगा।
- सत्यापित करें कि कैशिंग प्रॉक्सी में सही ढंग से काम करता है।
- सत्यापित करें कि कैशिंग उपयोगकर्ता एजेंटों में सही तरीके से काम करती है।
- सत्यापित करें कि उपयोगकर्ता एजेंट इतिहास तंत्र उपयोगकर्ता एजेंटों (सभी मामलों) में काम करता है।
- सत्यापित करें कि एक अस्थिर पृष्ठ के लिंक के बाद सर्वर से ताजा सामग्री प्राप्त होती है।
- HTTP के बजाय HTTPS का उपयोग करते समय सभी परिणामों को सत्यापित करें।
मुझे पिछले समान प्रश्न के बारे में पता है http://stackoverflow.com/questions/2970938/ideal-http-cache-control-headers-for- अलग-types-of-resources - हालांकि, यह है पहेली के तीन महत्वपूर्ण टुकड़े गायब हैं: बैक बटन व्यवहार, उपयोगकर्ता एजेंट संगतता और HTTP/1.0 प्रॉक्सी समर्थन। –
अन्य अक्सर उद्धृत स्रोत http://www.mnot.net/cache_docs/ भी बैक-बटन और HTTP/1.0 प्रॉक्सी समर्थन के साथ वास्तविक दुनिया उपयोगकर्ता एजेंट व्यवहार से निपटने से पीड़ित नहीं है। –
यहां कैश-कंट्रोल के बारे में एक लेख है: http://palisade.plynt.com/issues/2008Jul/cache-control-attributes/ - असली दुनिया बैक बटन व्यवहार, उपयोगकर्ता एजेंट संगतता और HTTP/1.0 प्रॉक्सी समर्थन भी अनुपलब्ध है। –