RSS

ปัญหาของการติดตั้งใช้งานจาวาสคริปต์ AJAX ข้ามโดเมน POST การเข้าถึงระยะไกลอย่างง่าย

วันที่วางจำหน่าย:2022/11/12 11:06

อันที่จริง ปัญหานั้นง่ายมาก คุณสามารถ POST คำขอได้ และเซิร์ฟเวอร์ก็ตอบกลับด้วย มันเป็นกลไกการรักษาความปลอดภัยของเบราว์เซอร์สมัยใหม่ที่ป้องกันไม่ให้จาวาสคริปต์ในเครื่องประมวลผลการตอบสนอง คอนโซลการแก้ปัญหาแสดง:

การเข้าถึง XMLHttpRequest ที่ 'https://ip.taotu.org/' จากต้นทาง 'null' ถูกบล็อกโดยนโยบาย CORS: ไม่มีส่วนหัว 'Access-Control-Allow-Origin' ในทรัพยากรที่ร้องขอ

ปัญหาคือถ้าคุณโพสต์หน้าท้องถิ่น เบราว์เซอร์จะเพิ่มส่วนหัวโดยอัตโนมัติ Origin: null และถ้าเซิร์ฟเวอร์ไม่เพิ่มส่วนหัวการตอบสนอง Access-Control-Allow-Origin: * เมื่อส่งคืนการตอบสนอง หรือส่วนหัว ค่าที่เซิร์ฟเวอร์ส่งคืนจะเหมือนกับค่าของคุณ หาก Origin ในส่วนหัวที่ส่งไม่ตรงกัน เบราว์เซอร์ไคลเอนต์จะไม่ส่งข้อมูลการตอบกลับไปยังจาวาสคริปต์เพื่อประมวลผล ส่งผลให้เกิดข้อผิดพลาด

วิธีแก้ไข: อันที่จริง มันง่ายมาก รหัสส่วนหลังของเซิร์ฟเวอร์ เราเพียงแค่ต้องตรวจสอบว่าข้อมูลที่โพสต์มีข้อมูลที่ระบุหรือไม่ (เทียบเท่ากับรหัสผ่านของเราเอง) ถ้าใช่ ให้เพิ่ม Access-Control-Allow-Origin: * เพื่อให้สามารถจัดการกับลูกค้าได้อย่างถูกต้อง

สรุปคือคำขอข้ามโดเมนของ AJAX ไม่อนุญาตโดยค่าเริ่มต้น และเบราว์เซอร์จะห้ามคำขอดังกล่าว เซิร์ฟเวอร์จะตัดสินว่าสถานการณ์นี้จำเป็นหรือไม่ และส่งกลับส่วนหัวการตอบสนองของ Access-Control-Allow-Origin:* และถือว่าใช้ได้

ขอรหัสจาวาสคริปต์หน้า:

var xhttp = XMLHttpRequest ใหม่ ();

xhttp.onreadystatechange = ฟังก์ชัน () {

ถ้า (สถานะนี้พร้อมสถานะ == 4 && สถานะสถานะนี้ == 200) {

document.getElementById("queryipinfo").innerHTML =

นี้. ข้อความตอบกลับ;

}

};

xhttp.open("โพสต์", "https://ip.taotu.org", จริง);

xhttp.send('XX มาจากคำขอระยะไกล XX'+ipdomain); // สตริงก่อนหน้าที่เพิ่มโดยรหัสคีย์จะเทียบเท่ากับรหัสผ่านของเราเอง

รหัสการประมวลผลฝั่งเซิร์ฟเวอร์:

สตรีม oPostData = คำขอ InputStream;

ไบต์ [] bPostByte = ไบต์ใหม่ [oPostData.Length];

oPostData.Read(bPostByte, 0, (int)oPostData.Length);

สตริง sPostIPDomain=Encoding.UTF8.GetString(bPostByte);

บูล bFromRemote;

ถ้า (sPostIPDomain.StartsWith("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 แบบคงที่ในเบราว์เซอร์ของเครื่องคอมพิวเตอร์ที่บ้าน และตั้งเป็นหน้าแรกเริ่มต้น ทุกครั้งที่ฉันเปิดเบราว์เซอร์ ฉันจะส่งคำขอโพสต์ไปยังเซิร์ฟเวอร์ระยะไกลผ่าน java และส่งคืนไฟล์ของฉัน IP เครือข่ายภายนอกและแสดงผล นอกจากนี้ยังมีลิงก์เว็บไซต์ที่ฉันใช้บ่อยบางส่วนในหน้าคงที่ ตลอดจนเครื่องมือค้นหาแบบสามในหนึ่งเดียว

นี่คือหน้าเว็บเล็กๆ ที่ฉันสร้างขึ้น ยินดีต้อนรับเข้าสู่หรือตั้งเป็นหน้าแรก: https://ip.taotu.org

ปัญหาของการติดตั้งใช้งานจาวาสคริปต์ AJAX ข้ามโดเมน POST การเข้าถึงระยะไกลอย่างง่าย

ความคิดเห็นของผู้ใช้

เพิ่มความคิดเห็นใหม่

รหัสยืนยัน

188BET - แพลตฟอร์มเดิมพันกีฬาที่ดีที่สุดในเอเชีย