जावास्क्रिप्ट AJAX क्रॉस-डोमेन POST रिमोट एक्सेस के सरल कार्यान्वयन की समस्या
रिलीज़ की तारीख:2022/11/12 11:06वास्तव में, समस्या बहुत सरल है। आप अनुरोध पोस्ट कर सकते हैं, और सर्वर भी प्रतिक्रिया देता है। यह आधुनिक ब्राउज़रों का सुरक्षा तंत्र है जो स्थानीय जावास्क्रिप्ट को प्रतिक्रिया को संसाधित करने से रोकता है। डिबग कंसोल दिखाता है:
मूल 'null' से 'https://ip.taotu.org/' पर XMLHttpRequest तक पहुंच को CORS नीति द्वारा अवरुद्ध कर दिया गया है: अनुरोधित संसाधन पर कोई 'Access-Control-Allow-Origin' हेडर मौजूद नहीं है।
समस्या यह है कि यदि आप एक स्थानीय पृष्ठ पोस्ट करते हैं, तो ब्राउज़र स्वचालित रूप से एक शीर्षलेख जोड़ देगा, उत्पत्ति: शून्य, और यदि सर्वर प्रतिक्रिया शीर्षलेख एक्सेस-कंट्रोल-अनुमति-उत्पत्ति नहीं जोड़ता है: * प्रतिक्रिया लौटाते समय, या शीर्षलेख सर्वर द्वारा लौटाया गया मान आपके जैसा ही है यदि भेजे गए शीर्षलेख में मूल मेल नहीं खाता है, तो ब्राउज़र क्लाइंट प्रोसेसिंग के लिए जावास्क्रिप्ट को प्रतिक्रिया डेटा नहीं सौंपेगा, जिसके परिणामस्वरूप त्रुटि होगी।
समाधान: वास्तव में, यह बहुत सरल है, सर्वर बैक-एंड कोड, हमें केवल यह जांचने की आवश्यकता है कि क्या पोस्ट डेटा में निर्दिष्ट जानकारी है (हमारे अपने पासवर्ड के बराबर), यदि हाँ, तो एक्सेस-कंट्रोल-अनुमति-उत्पत्ति जोड़ें: *, ताकि क्लाइंट को सही तरीके से हैंडल किया जा सके।
सारांश यह है कि AJAX क्रॉस-डोमेन अनुरोधों को डिफ़ॉल्ट रूप से अनुमति नहीं है, और ब्राउज़र उन्हें प्रतिबंधित करेगा। सर्वर न्याय करता है कि क्या स्थिति को इसकी आवश्यकता है, और एक Access-Control-Allow-Origin:* प्रतिक्रिया शीर्षलेख देता है और यह ठीक है।
अनुरोध पेज जावास्क्रिप्ट कोड:
var xhttp = नया XMLHttpRequest ();
xhttp.onreadystatechange = फ़ंक्शन () {
if (this. readyState == 4 && this. status == 200) {
document.getElementById("queryipinfo").innerHTML =
यह प्रतिक्रिया पाठ;
}
};
xhttp.open ("POST", "https://ip.taotu.org", सच);
xhttp.send ('XX दूरस्थ अनुरोध XX से आता है' + ipdomain); // कुंजी कोड द्वारा जोड़ा गया पिछला स्ट्रिंग हमारे अपने पासवर्ड के बराबर है
सर्वर-साइड प्रोसेसिंग कोड:
स्ट्रीम oPostData = Request. InputStream;
बाइट [] bPostByte = नई बाइट [oPostData.Length];
oPostData.Read (bPostByte, 0, (int) oPostData.Length);
स्ट्रिंग sPostIPDomain=Encoding.UTF8.GetString(bPostByte);
बूल बी फ्रॉम रिमोट;
if (sPostIPDomain.StartsWith("XX रिमोट रिक्वेस्ट XX से आता है")) // key code
{
bFromRemote=true;
sPostIPDomain = Regex.Replace(sPostIPDomain,"XX दूरस्थ अनुरोध XX(.*)", "$1" से आता है);
*********छोड़ा गया कोड********
if (bFromRemote) // कुंजी कोड यह निर्धारित करने के लिए कि हेडर वापस करना है या नहीं
Response.AddHeader ("पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति", "*"); // कुंजी कोड
वैसे, सभी क्रॉस-डोमेन अनुरोधों को अनुमति देने के लिए सर्वर रिस्पांस हेडर में Access-Control-Allow-Origin: * सेट करना सामान्य समाधान है, या अनुमति देने के लिए Access-Control-Allow-Origin: https://taotu.org निर्दिष्ट डोमेन द्वारा भेजे गए अनुरोध का उपयोग सामान्य नेटवर्क विकास द्वारा किया जाता है, लेकिन यदि आवश्यकता है कि घर पर स्थानीय रूप से भेजा गया अनुरोध डोमेन एक आईपी पता है, और यह एक निश्चित आईपी नहीं है, तो इसे लंबे समय तक हल नहीं किया जा सकता है, इसलिए मैंने इस सरल उपाय का उपयोग किया।
मेरा उद्देश्य घर पर स्थानीय कंप्यूटर के ब्राउज़र में एक स्थिर .html फ़ाइल सेट करना है, और इसे डिफ़ॉल्ट होम पेज के रूप में सेट करना है। हर बार जब मैं ब्राउज़र खोलता हूं, तो मैं जावा के माध्यम से दूरस्थ सर्वर को एक पोस्ट अनुरोध भेजता हूं, और वापस करता हूं मेरा बाहरी नेटवर्क आईपी और इसे प्रदर्शित करें। स्टैटिक पेज पर मेरे अक्सर उपयोग किए जाने वाले कुछ वेबसाइट लिंक के साथ-साथ थ्री-इन-वन सर्च इंजन भी हैं।
यह मेरे द्वारा बनाया गया एक छोटा सा वेबपेज है, इसे देखने या होमपेज के रूप में सेट करने के लिए आपका स्वागत है: https://ip.taotu.org
उपयोगकर्ता टिप्पणी
नई टिप्पणी जोड़ें