# ETag से कैशिंग — REST API Design: Resources, Status Codes और Security

Source: https://www.skillbyai.com/hi/restapi/api-caching-etags

> Cache-Control, ETag और If-None-Match से bandwidth घटाएँ ताकि clients को पूरे body के बजाय 304 Not Modified मिले।

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

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

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

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

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

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

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

HTTP/1.1 304 Not Modified
ETag: "a1b2c3"
```

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

- [ ] पूरी बॉडी के साथ 200 OK
- [ ] 404 Not Found
- [ ] 500 Internal Server Error
- [x] बिना बॉडी के 304 Not Modified

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