مشكلة التنفيذ البسيط لجافا سكريبت AJAX عبر نطاقات الوصول البعيد POST
يوم الاصدار:2022/11/12 11:06في الواقع ، المشكلة بسيطة للغاية ، يمكنك نشر الطلب ، ويعيد الخادم أيضًا استجابة ، وهي آلية الأمان للمتصفحات الحديثة التي تمنع جافا سكريبت المحلية من معالجة الاستجابة. تعرض وحدة التصحيح:
تم حظر الوصول إلى XMLHttpRequest على 'https://ip.taotu.org/' من الأصل 'null' بواسطة سياسة CORS: لا يوجد رأس 'Access-Control-Allow-Origin' موجود على المورد المطلوب.
تكمن المشكلة في أنه إذا قمت بنشر صفحة محلية ، فسيقوم المتصفح تلقائيًا بإضافة عنوان ، Origin: null ، وإذا لم يقم الخادم بإضافة رأس الاستجابة Access-Control-Allow-Origin: * عند إرجاع الاستجابة ، أو العنوان القيمة التي أرجعها الخادم هي نفس القيمة الخاصة بك إذا كان الأصل في الرأس المرسل غير متطابق ، فلن يقوم عميل المتصفح بتسليم بيانات الاستجابة إلى جافا سكريبت للمعالجة ، مما يؤدي إلى حدوث خطأ.
الحل: في الواقع ، إنه بسيط للغاية ، رمز الخادم الخلفي ، نحتاج فقط إلى التحقق مما إذا كانت بيانات المنشور تحتوي على المعلومات المحددة (المكافئة لكلمة المرور الخاصة بنا) ، إذا كانت الإجابة بنعم ، أضف Access-Control-Allow-Origin: * ، بحيث يمكن التعامل مع العميل بشكل صحيح.
الملخص هو أن طلبات AJAX عبر النطاقات غير مسموح بها افتراضيًا ، وسوف يحظرها المتصفح. ويحكم الخادم على ما إذا كان الموقف ضروريًا ، ويعيد رأس استجابة Access-Control-Allow-Origin: * وهو أمر مقبول.
طلب كود جافا سكريبت للصفحة:
var xhttp = new XMLHttpRequest () ،
xhttp.onreadystatechange = function () {
إذا (هذه. readyState == 4 && this. status == 200) {
document.getElementById ("queryipinfo"). innerHTML =
هذا الرد النص.
}
} ؛
xhttp.open ("POST" ، "https://ip.taotu.org" ، صحيح) ؛
xhttp.send (يأتي XX من طلب بعيد XX '+ ipdomain) ؛ // السلسلة السابقة المضافة بواسطة رمز المفتاح تعادل كلمة المرور الخاصة بنا
كود المعالجة من جانب الخادم:
دفق oPostData = طلب.
بايت [] bPostByte = بايت جديد [oPostData.Length] ؛
oPostData.Read (bPostByte، 0، (int) oPostData.Length) ؛
سلسلة sPostIPDomain = Encoding.UTF8.GetString (bPostByte) ،
bool bFromRemote؛
if (sPostIPDomain.SStartsWith ("XX يأتي من طلب بعيد XX")) // رمز المفتاح
{
bFromRemote = صحيح ؛
sPostIPDomain = Regex.Replace (sPostIPDomain، "XX يأتي من طلب بعيد XX (. *)"، "$ 1") ؛
********* رمز تم حذفه ********
if (bFromRemote) // رمز المفتاح للحكم على ما إذا كان سيتم إرجاع الرأس
Response.AddHeader ("Access-Control-Allow-Origin"، "*")؛ // رمز المفتاح
بالمناسبة ، الحل العادي هو تعيين Access-Control-Allow-Origin: * في رأس استجابة الخادم للسماح لجميع الطلبات عبر المجال ، أو Access-Control-Allow-Origin: https://taotu.org للسماح يتم استخدام الطلب المرسل من قبل المجال المحدد بواسطة تطوير الشبكة العادي ، ولكن إذا كان الشرط هو أن نطاق الطلب المرسل محليًا في المنزل هو عنوان IP ، وليس عنوان IP ثابتًا ، فلا يمكن حل هذا الأمر لفترة طويلة ، لذلك لقد استخدمت هذا الحل البسيط.
هدفي هو تعيين ملف .html ثابت في متصفح الكمبيوتر المحلي في المنزل ، وتعيينه كصفحة رئيسية افتراضية. في كل مرة أقوم فيها بفتح المتصفح ، أرسل طلب نشر إلى الخادم البعيد من خلال جافا ، وأعيد IP الخاص بشبكتي الخارجية وعرضه. هناك أيضًا بعض ارتباطات مواقع الويب المستخدمة بشكل متكرر على الصفحة الثابتة ، بالإضافة إلى محرك بحث ثلاثة في واحد.
هذه صفحة ويب صغيرة قمت بإنشائها ، مرحبًا بكم في زيارتها أو تعيينها كصفحة رئيسية: https://ip.taotu.org
تعليق المستخدم
أضف تعليق جديد