पाठ 21 / 24

ETag से कैशिंग

क्लाइंट को ऐसा डेटा दोबारा डाउनलोड करने से बचाना जो बदला नहीं है।

Cache-Control नियम तय करता है

Cache-Control: max-age=60 क्लाइंट और प्रॉक्सी को बताता है कि रिस्पॉन्स 60 सेकंड तक ताज़ा है — उस विंडो में कोई रिक्वेस्ट ज़रूरी नहीं। no-store कहता है इसे कभी कैश न करें (संवेदनशील डेटा)।

रिवैलिडेशन के लिए ETag

एक ETag वर्तमान प्रतिनिधित्व की एक फ़िंगरप्रिंट है। क्लाइंट इसे If-None-Match के रूप में वापस भेजता है; यदि अपरिवर्तित हो तो सर्वर बिना बॉडी के 304 Not Modified जवाब देता है — बैंडविड्थ बचाते हुए ताज़गी की पुष्टि करता है।

रिवैलिडेशन राउंड-ट्रिप

क्लाइंट हमेशा रिक्वेस्ट भेजता है, पर मैच होने पर बॉडी वायर पर नहीं जाती।

GET /orders/482 HTTP/1.1
If-None-Match: "a1b2c3"

HTTP/1.1 304 Not Modified
ETag: "a1b2c3"

त्वरित जाँच: एक क्लाइंट `If-None-Match` में ऐसा ETag भेजता है जो अभी भी मौजूदा रिसोर्स से मेल खाता है। सर्वर को क्या लौटाना चाहिए?

  • पूरी बॉडी के साथ 200 OK
  • बिना बॉडी के 304 Not Modified
  • 404 Not Found
Answer

बिना बॉडी के 304 Not Modified — मेल खाता ETag बताता है कि क्लाइंट की कैश्ड कॉपी अभी भी मान्य है, इसलिए सर्वर 304 से ताज़गी की पुष्टि करता है और बॉडी दोबारा भेजना छोड़ देता है।