304 Not Modified किसी कंडीशनल GET या HEAD रिक्वेस्ट का जवाब है, यानी ऐसी रिक्वेस्ट जिसमें If-None-Match या If-Modified-Since हो, जब शर्त से पता चले कि क्लाइंट की स्टोर की गई कॉपी अब भी ताज़ा है। रिसोर्स दोबारा भेजने की जगह सर्वर 304 लौटाता है और क्लाइंट अपनी कैश की गई कॉपी इस्तेमाल करता है। इससे बैंडविड्थ और समय दोनों बचते हैं।
304 में कभी बॉडी नहीं होती; यह हेडर के बाद वाली खाली लाइन पर खत्म होता है। Cache-Control, Content-Location, Date, ETag, Expires और Vary में से जो हेडर 200 रिस्पॉन्स में होते, उन्हें सर्वर को भेजना ज़रूरी है, ताकि कैश स्टोर किए गए रिस्पॉन्स को अपडेट कर सकें।
3xx रेंज में होने के बावजूद 304 रीडायरेक्ट नहीं है। इसमें कोई Location नहीं होता, और क्लाइंट उसी URL पर रहता है। अगर किसी क्लाइंट को कंडीशनल रिक्वेस्ट भेजे बिना 304 मिलता है, तो वह किसी खराब सर्वर से बात कर रहा है।
उदाहरण रिस्पॉन्स
HTTP/1.1 304 Not Modified
Date: Fri, 06 Nov 2026 10:15:32 GMT
ETag: "5f2b-1a3c"
Last-Modified: Wed, 28 Oct 2026 08:02:11 GMT
Cache-Control: public, max-age=600
Vary: Accept-Encoding SEO और रीडायरेक्ट जांच
304 क्रॉलिंग में मदद करता है। Google के क्रॉलर कंडीशनल रिक्वेस्ट सपोर्ट करते हैं, और 304 से Googlebot को पता चलता है कि पिछले क्रॉल के बाद कॉन्टेंट नहीं बदला है। इससे क्रॉल क्षमता और सर्वर लोड दोनों बचते हैं और पेज इंडेक्स में अपनी जगह बनाए रखता है, इसलिए भरोसेमंद ETag या Last-Modified हेडर रखना फ़ायदेमंद है, खासकर बड़ी साइटों पर।
TrueURL डिफ़ॉल्ट रूप से कंडीशनल हेडर नहीं भेजता, इसलिए आपको 304 की जगह 200 दिखेगा। रीवैलिडेशन टेस्ट करने के लिए कस्टम रिक्वेस्ट हेडर में पेज के ETag के साथ If-None-Match हेडर जोड़ें।
आम वजहें और इस्तेमाल
- कोई ब्राउज़र कैश किए गए पेज, इमेज या स्क्रिप्ट को
If-None-Matchसे रीवैलिडेट करता है, औरETagअब भी मेल खाता है। - कोई क्रॉलर या फ़ीड रीडर
If-Modified-Sinceके साथ दोबारा रिक्वेस्ट भेजता है, और कुछ नहीं बदला है। - डिप्लॉय के बाद विज़िटर को पुराना कॉन्टेंट दिखता है, क्योंकि सर्वर 304 ही लौटाता रहता है: उसके वैलिडेटर नहीं बदले, जैसे फ़ाइल साइज़ और मॉडिफ़िकेशन टाइम से बना
ETag, जिसे डिप्लॉय के बाद भी वैसा ही रहने दिया गया। पक्का करें कि जब भी कॉन्टेंट बदले, वैलिडेटर भी बदलें।