2011-11-17 12 views
35

http://www.a.com/service.asmx पर एक वेब सेवा बनाएं और http से क्रॉस-डोमेन AJAX अनुरोध भेजें : //www.b.comफ़ायरबग, या लाइव HTTP शीर्षलेख, या आपकी इच्छित अन्य प्लगइन में शीर्षलेखों की जांच करें।क्रॉस-डोमेन AJAX एक्स-अनुरोधित-हेडर के साथ

एक्स-अनुरोधित- अनुरोध शीर्षलेखों के बीच HTTP शीर्षलेख फ़ील्ड के साथ कोई अनुरोध नहीं है।

हालांकि, यदि आप एक ही डोमेन से उसी सेवा से AJAX अनुरोध भेजते हैं (उदाहरण के लिए http://www.a.com/about), तो आप हेडर फ़ील्ड देखेंगे।

क्यों एक्स-अनुरोध किया गया है- क्रॉस-डोमेन AJAX अनुरोधों के लिए छोड़ा गया हेडर फ़ील्ड?

अद्यतन: मुझे पता है कि JSONP कॉल प्रकृति में AJAX कॉल नहीं हैं। इस प्रकार आप JSONP कॉल में एक्स-अनुरोधित- हेडर फ़ील्ड के साथ नहीं देखेंगे।

उत्तर

60

यदि आप अपने AJAX अनुरोध करने के लिए jQuery का उपयोग कर रहे हैं, तो यह हेडर एक्स-अनुरोधित-साथ (HTTP_X_REQUESTED_WITH) = XMLHttpRequest नहीं भेजेगा, क्योंकि यह क्रॉस डोमेन है।

विकल्प 1) मैन्युअल ajax कॉल में हेडर सेट:

$.ajax({ 
    url: "http://your-url...", 
headers: {'X-Requested-With': 'XMLHttpRequest'} 
}); 

विकल्प 2) jQuery बताएँ क्रॉस डोमेन चूक नहीं उपयोग करने के लिए, तो यह लेकिन वहाँ 2 तरीके इसे ठीक करने और हैडर भेज रहे हैं

print "Access-Control-Allow-Origin: *\n"; 
print "Access-Control-Allow-Headers: X-Requested-With, Content-Type\n"; 
:

$.ajax({ 
    url: "http://your-url...", 
crossDomain: false 
}); 

लेकिन इस के साथ, सर्वर उन हेडर की अनुमति देनी चाहिए, तो सर्वर उन हेडर मुद्रित करने के लिए की जरूरत है: एक्स-अनुरोधित-साथ हैडर ajax अनुरोध में रखेंगे

उपरोक्त पहली पंक्ति त्रुटि से बच जाएगी "उत्पत्ति को नियंत्रण-अनुमति-उत्पत्ति द्वारा उत्पत्ति की अनुमति नहीं है।"
दूसरी पंक्ति त्रुटि त्रुटि से बच जाएगी "अनुरोध हेडर फ़ील्ड एक्स-अनुरोधित-एक्सेस-कंट्रोल-स्वीकृति-हेडर द्वारा अनुमति नहीं है।"

+16

पहली पंक्ति सभी को आपके सर्वर पर क्रॉस डोमेन अनुरोध करने की अनुमति देती है जो सामान्य रूप से एक अच्छा विचार नहीं है। एक श्वेतसूची के खिलाफ "उत्पत्ति" शीर्षलेख की जांच करके "एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन" हेडर को गतिशील रूप से सेट किया जाना चाहिए। –

संबंधित मुद्दे