दुर्भाग्य से, आपके प्रारंभिक पृष्ठ अनुरोध के लिए आपको HTTP प्रतिक्रिया हेडर देने के लिए एपीआई नहीं है। यह यहाँ पोस्ट किया गया मूल प्रश्न था। यह भी बार-बार पूछा गया है, क्योंकि कुछ लोग मूल पेज अनुरोध के वास्तविक प्रतिक्रिया शीर्षकों को एक दूसरे को जारी किए बिना प्राप्त करना चाहेंगे।
AJAX अनुरोधों के लिए:
यदि AJAX के लिए HTTP अनुरोध किया जाता है, तो getAllResponseHeaders()
विधि के साथ प्रतिक्रिया हेडर प्राप्त करना संभव है । यह XMLHttpRequest API का हिस्सा है। यह कैसे लागू किया जा सकता है यह देखने के लिए, fetchSimilarHeaders()
नीचे दिए गए फ़ंक्शन को देखें। ध्यान दें कि यह एक समस्या है जो कुछ अनुप्रयोगों के लिए विश्वसनीय नहीं होगी।
myXMLHttpRequest.getAllResponseHeaders();
यह आपको मूल पृष्ठ अनुरोध के HTTP प्रतिक्रिया हेडर के बारे में जानकारी नहीं देगा, लेकिन इसका उपयोग उन हेडर के बारे में शिक्षित अनुमान लगाने के लिए किया जा सकता है। उस पर और अधिक वर्णित है।
प्रारंभिक पृष्ठ अनुरोध से हेडर मान प्राप्त करना:
यह सवाल पहली बार कई साल पहले पूछा गया था, विशेष रूप से यह पूछने पर कि वर्तमान पृष्ठ के लिए मूल HTTP प्रतिक्रिया हेडर कैसे प्राप्त करें (यानी उसी पृष्ठ जिसके अंदर जावास्क्रिप्ट चल रहा था)। यह किसी भी HTTP अनुरोध के लिए बस प्रतिक्रिया हेडर प्राप्त करने की तुलना में काफी अलग प्रश्न है। प्रारंभिक पृष्ठ अनुरोध के लिए, हेडर आसानी से जावास्क्रिप्ट के लिए उपलब्ध नहीं हैं। क्या हेडर मान आपके लिए आवश्यक है और यदि आप AJAX के माध्यम से फिर से उसी पृष्ठ का अनुरोध करते हैं तो आप पर्याप्त रूप से और पर्याप्त रूप से सुसंगत होंगे।
उस समस्या को हल करने के लिए कुछ सुझाव दिए गए हैं।
1. संसाधनों पर अनुरोध जो काफी हद तक स्थिर हैं
यदि प्रतिक्रिया काफी हद तक स्थिर है और शीर्ष लेख अनुरोधों के बीच बहुत अधिक परिवर्तन की उम्मीद नहीं कर रहे हैं, तो आप उसी पृष्ठ के लिए एक AJAX अनुरोध कर सकते हैं जो आप वर्तमान में कर रहे हैं और यह मान लें कि वे वही मूल्य हैं जो पृष्ठ का हिस्सा थे HTTP प्रतिक्रिया। यह आपको ऊपर वर्णित अच्छे XMLHttpRequest API का उपयोग करके हेडर का उपयोग करने की अनुमति दे सकता है।
function fetchSimilarHeaders (callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === XMLHttpRequest.DONE) {
//
// The following headers may often be similar
// to those of the original page request...
//
if (callback && typeof callback === 'function') {
callback(request.getAllResponseHeaders());
}
}
};
//
// Re-request the same page (document.location)
// We hope to get the same or similar response headers to those which
// came with the current page, but we have no guarantee.
// Since we are only after the headers, a HEAD request may be sufficient.
//
request.open('HEAD', document.location, true);
request.send(null);
}
यह दृष्टिकोण समस्याग्रस्त होगा यदि आपको वास्तव में अनुरोधों के बीच संगत मूल्यों पर भरोसा करना है, क्योंकि आप पूरी तरह से गारंटी नहीं दे सकते कि वे समान हैं। यह आपके विशिष्ट अनुप्रयोग पर निर्भर करने वाला है और क्या आप जानते हैं कि आपके लिए आवश्यक मूल्य एक ऐसी चीज है जो एक अनुरोध से अगले तक नहीं बदलेगी।
2. मेकअप करें
हैं कुछ बीओएम गुण (ब्राउज़र ऑब्जेक्ट मॉडल) जो ब्राउज़र हेडर को देखकर निर्धारित करता है। इनमें से कुछ गुण सीधे HTTP हेडर को दर्शाते हैं (जैसे navigator.userAgent
HTTP User-Agent
हेडर फ़ील्ड के मान पर सेट है )। उपलब्ध गुणों के आस-पास सूँघने से आप यह पता लगाने में सक्षम हो सकते हैं कि आपको क्या चाहिए, या HTTP प्रतिक्रिया क्या है, यह इंगित करने के लिए कुछ सुराग।
3. उन्हें स्टैश
यदि आप सर्वर साइड को नियंत्रित करते हैं, तो आप किसी भी हेडर का उपयोग कर सकते हैं जैसे आप पूर्ण प्रतिक्रिया का निर्माण करते हैं। मान को पृष्ठ के साथ क्लाइंट को पास किया जा सकता है, कुछ मार्कअप में या शायद एक इनबिल्ड JSON संरचना में स्टैक्ड। यदि आप प्रत्येक जावास्क्रिप्ट अनुरोध हैडर को अपनी जावास्क्रिप्ट के लिए उपलब्ध करना चाहते हैं, तो आप सर्वर पर उनके माध्यम से पुनरावृत्ति कर सकते हैं और उन्हें मार्कअप में छिपे हुए मानों के रूप में वापस भेज सकते हैं। यह शायद हेडर मूल्यों को इस तरह से भेजने के लिए आदर्श नहीं है, लेकिन आप निश्चित रूप से इसे उस विशिष्ट मूल्य के लिए कर सकते हैं जिसकी आपको आवश्यकता है। यह समाधान यकीनन अक्षम है, भी, लेकिन यह काम करेगा यदि आपको इसकी आवश्यकता है।