RSS

مشكلة التنفيذ البسيط لجافا سكريبت 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

مشكلة التنفيذ البسيط لجافا سكريبت AJAX عبر نطاقات الوصول البعيد POST

تعليق المستخدم

أضف تعليق جديد

رمز التحقق

188BET - أفضل منصة مراهنات رياضية في آسيا