เป็นไปได้หรือไม่ที่จะป้องกันไม่ให้เบราว์เซอร์ติดตามการเปลี่ยนเส้นทางเมื่อส่ง XMLHttpRequest-s (เช่นรับรหัสสถานะการเปลี่ยนเส้นทางกลับมาและจัดการด้วยตัวเอง)
เป็นไปได้หรือไม่ที่จะป้องกันไม่ให้เบราว์เซอร์ติดตามการเปลี่ยนเส้นทางเมื่อส่ง XMLHttpRequest-s (เช่นรับรหัสสถานะการเปลี่ยนเส้นทางกลับมาและจัดการด้วยตัวเอง)
คำตอบ:
ไม่เป็นไปตามมาตรฐาน W3C สำหรับอ็อบเจ็กต์ XMLHttpRequest (เน้นเพิ่ม):
หากการตอบกลับเป็นการเปลี่ยนเส้นทาง HTTP:
หากต้นทางของ URL ที่ถ่ายทอดโดยส่วนหัวตำแหน่งเป็นจุดเริ่มต้นเดียวกันกับต้นทาง XMLHttpRequest และการเปลี่ยนเส้นทางไม่ละเมิดข้อควรระวังการวนซ้ำแบบไม่สิ้นสุดให้ปฏิบัติตามการเปลี่ยนเส้นทางอย่างโปร่งใสในขณะที่ปฏิบัติตามกฎเหตุการณ์คำขอต้นทางเดียวกัน
พวกเขากำลังพิจารณาเรื่องนี้สำหรับการเปิดตัวในอนาคต:
ข้อกำหนดนี้ไม่รวมคุณสมบัติต่อไปนี้ซึ่งอยู่ระหว่างการพิจารณาสำหรับเวอร์ชันอนาคตของข้อกำหนดนี้:
- คุณสมบัติในการปิดใช้งานการเปลี่ยนเส้นทางต่อไปนี้
แต่ข้อกำหนดล่าสุดไม่ได้กล่าวถึงเรื่องนี้อีกต่อไป
ใหม่Fetch APIสนับสนุนโหมดที่แตกต่างของการจัดการการเปลี่ยนเส้นทาง: follow
, error
และmanual
, แต่ฉันไม่สามารถหาวิธีที่จะดู URL ใหม่หรือรหัสสถานะเมื่อเปลี่ยนเส้นทางได้ถูกยกเลิกแล้ว คุณสามารถหยุดการเปลี่ยนเส้นทางได้เองจากนั้นดูเหมือนข้อผิดพลาด (การตอบกลับว่างเปล่า) หากนั่นคือทั้งหมดที่คุณต้องการคุณก็พร้อมที่จะไป นอกจากนี้คุณควรจะตระหนักว่าการร้องขอที่ทำผ่าน API นี้จะไม่ได้บอกเลิกเลย พวกเขาอยู่ในขณะนี้
สำหรับ XMLHttpRequest คุณสามารถHEAD
เซิร์ฟเวอร์และตรวจสอบว่า URL มีการเปลี่ยนแปลงหรือไม่:
var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
if (this.readyState === this.DONE) {
console.log(this.responseURL);
}
};
http.send();
คุณจะไม่ได้รับรหัสสถานะ แต่จะพบ URL ใหม่โดยไม่ต้องดาวน์โหลดทั้งหน้าจากมัน
OPTIONS
อาจเป็นทางเลือกที่ดีกว่าอย่างไรก็ตามใช้ได้เฉพาะกับวัตถุประสงค์ทั่วไปเท่านั้นเป็นต้นผู้ดูแลระบบได้กำหนดค่าการเปลี่ยนเส้นทางไซต์ / สคีมาทั้งหมดเช่น HTTP -> HTTPS
คุณสามารถใช้responseURL
คุณสมบัติเพื่อรับปลายทางการเปลี่ยนเส้นทางหรือตรวจสอบว่าท้ายที่สุดแล้วการตอบกลับถูกดึงมาจากตำแหน่งที่คุณยอมรับหรือไม่
แน่นอนว่าผลลัพธ์จะถูกดึงออกมา แต่อย่างน้อยคุณจะได้รับข้อมูลที่จำเป็นเกี่ยวกับปลายทางการเปลี่ยนเส้นทางและตัวอย่างเช่นตรวจหาเงื่อนไขเมื่อคุณต้องการละทิ้งการตอบกลับ
ไม่มีคุณไม่มีที่ใดใน API ที่เปิดเผยโดย XMLHttpRequest ที่ช่วยให้คุณสามารถลบล้างพฤติกรรมเริ่มต้นของการติดตาม 301 หรือ 302 โดยอัตโนมัติ
หากไคลเอนต์กำลังเรียกใช้ IE บน windows คุณสามารถใช้ WinHTTP แทนเพื่อตั้งค่าตัวเลือกเพื่อป้องกันพฤติกรรมนั้น แต่เป็นวิธีแก้ปัญหาที่ จำกัด มาก