เราสามารถสร้างสถานการณ์ต่อไปนี้ขึ้นใหม่ได้อย่างน่าเชื่อถือ:
- สร้างเพจ HTML ขนาดเล็กที่ส่งคำขอ AJAX ไปยังเซิร์ฟเวอร์ (โดยใช้ HTTP POST)
- ยกเลิกการเชื่อมต่อจากเครือข่ายและเชื่อมต่อใหม่
- ตรวจสอบแพ็กเก็ตที่ IE สร้างขึ้นหลังจากความล้มเหลว
หลังจากการเชื่อมต่อเครือข่ายล้มเหลว IE จะส่งคำขอ AJAX ถัดไป แต่จะส่งเฉพาะส่วนหัว HTTP (ไม่ใช่เนื้อหา) เมื่อทำการโพสต์ HTTP สิ่งนี้ทำให้เกิดปัญหาทุกประเภทบนเซิร์ฟเวอร์เนื่องจากเป็นเพียงคำขอบางส่วน Google พบปัญหานี้กับ Bing และคุณจะพบผู้คนจำนวนมากบ่นเกี่ยวกับ "ข้อผิดพลาดของเซิร์ฟเวอร์แบบสุ่ม" โดยใช้ AJAX หรือความล้มเหลวของ AJAX ที่ไม่ได้อธิบาย
เราทราบดีว่า IE (ไม่เหมือนกับเบราว์เซอร์อื่น ๆ ส่วนใหญ่) จะส่ง HTTP POST เป็นสองแพ็กเก็ต TCP / IP เสมอ ส่วนหัวและเนื้อหาจะถูกส่งแยกกัน ในกรณีที่เกิดความล้มเหลวโดยตรงIE จะส่งเฉพาะส่วนหัวเท่านั้น IE ไม่เคยส่ง payload และในที่สุดเซิร์ฟเวอร์ก็ตอบสนองด้วย Timeout
คำถามของฉันคือ - ทำไมมันถึงทำงานแบบนี้? ดูเหมือนว่าผิดตามข้อมูลจำเพาะ HTTP และเบราว์เซอร์อื่น ๆ ไม่ทำงานในลักษณะนี้ มันเป็นเพียงข้อผิดพลาดหรือไม่? แน่นอนว่าสิ่งนี้สร้างความเสียหายในแอปพลิเคชันเว็บที่ใช้ AJAX อย่างร้ายแรง
ข้อมูลอ้างอิง:
มีปัญหาที่คล้ายกันซึ่งเกิดจากการหมดเวลาของ HTTP ที่มีชีวิตอยู่ซึ่งสั้นกว่า 1 นาทีและมีการบันทึกไว้ที่นี่: