คำตอบสั้น ๆ
ไม่ใช่รหัสตอบกลับ HTTP แต่มีการจัดทำเอกสารโดย WhatWG เป็นค่าที่ถูกต้องสำหรับแอตทริบิวต์สถานะของการXMLHttpRequest
ตอบกลับหรือการดึงข้อมูล
โดยทั่วไปแล้วค่านี้เป็นค่าเริ่มต้นที่ใช้เมื่อไม่มีรหัสสถานะ HTTP จริงที่จะรายงานและ / หรือเกิดข้อผิดพลาดในการส่งคำขอหรือรับการตอบกลับ สถานการณ์ที่เป็นไปได้ในกรณีนี้รวมถึง แต่ไม่ จำกัด เฉพาะ:
- ยังไม่ได้ส่งคำขอหรือถูกยกเลิก
- เบราว์เซอร์ยังคงรอรับสถานะการตอบกลับและส่วนหัว
- การเชื่อมต่อหลุดระหว่างการร้องขอ
- คำขอหมดเวลา
- คำขอพบการวนรอบการเปลี่ยนเส้นทางที่ไม่สิ้นสุด
- เบราว์เซอร์ทราบสถานะการตอบสนอง แต่คุณไม่ได้รับอนุญาตให้เข้าถึงเนื่องจากข้อ จำกัด ด้านความปลอดภัยที่เกี่ยวข้องกับนโยบายแหล่งกำเนิดเดียวกัน
คำตอบยาว
ก่อนอื่นขอย้ำอีกครั้งว่า 0 ไม่ใช่รหัสสถานะ HTTP มีรายชื่อทั้งหมดในRFC 7231 ส่วน 6.1ซึ่งไม่รวม 0 และบทนำของส่วน 6 ระบุไว้อย่างชัดเจนว่า
องค์ประกอบรหัสสถานะคือรหัสจำนวนเต็มสามหลัก
ซึ่ง 0 ไม่ใช่
อย่างไรก็ตาม 0 เป็นค่าของ.status
แอตทริบิวต์ของวัตถุ XMLHttpRequest จะได้รับการจัดทำเป็นเอกสารแม้ว่าจะเป็นเรื่องยุ่งยากเล็กน้อยในการติดตามรายละเอียดที่เกี่ยวข้องทั้งหมด เราเริ่มต้นที่https://xhr.spec.whatwg.org/#the-status-attributeโดยจัดทำเอกสาร.status
แอตทริบิวต์ซึ่งระบุเพียง:
status
แอตทริบิวต์ต้องกลับมาตอบสนอง ‘s สถานะ
นั่นอาจฟังดูไร้สาระและน่าเบื่อ แต่ในความเป็นจริงมีข้อมูลอยู่ที่นี่! โปรดจำไว้ว่าเอกสารนี้กำลังพูดถึง.response
แอตทริบิวต์ของ an XMLHttpRequest
ไม่ใช่คำตอบดังนั้นสิ่งนี้จะบอกเราว่าคำจำกัดความของสถานะบนวัตถุ XHR จะเลื่อนไปตามคำจำกัดความของสถานะการตอบกลับในข้อมูลจำเพาะการดึงข้อมูล
แต่สิ่งที่ตอบสนองวัตถุ? จะเป็นอย่างไรหากเรายังไม่ได้รับคำตอบ ลิงก์แบบอินไลน์ของคำว่า "response" นำเราไปที่https://xhr.spec.whatwg.org/#responseซึ่งอธิบายว่า:
XMLHttpRequest
มีการตอบสนองที่เกี่ยวข้อง เว้นแต่จะระบุไว้เป็นอย่างอื่นมันเป็นความผิดพลาดของเครือข่าย
ดังนั้นการตอบสนองของสถานะที่เราได้รับจึงเป็นข้อผิดพลาดของเครือข่ายโดยค่าเริ่มต้น และจากการค้นหาทุกที่ที่มีการใช้วลี"set response to"ในข้อมูลจำเพาะ XHR เราจะเห็นว่ามีการตั้งค่าไว้ใน 5 ตำแหน่ง:
เมื่อดูในมาตรฐานการดึงข้อมูลเราจะเห็นว่า:
ข้อผิดพลาดของเครือข่ายคือการตอบสนองที่มีสถานะอยู่เสมอ0
ดังนั้นเราจึงสามารถบอกได้ทันทีว่าเราจะเห็นสถานะเป็น 0 บนวัตถุ XHR ในกรณีใด ๆ ที่ข้อมูลจำเพาะ XHR ระบุว่าควรตั้งค่าการตอบกลับเป็นข้อผิดพลาดของเครือข่าย (ที่น่าสนใจนี้รวมถึงกรณีที่กระแสของร่างกาย "ผิดพลาด" ซึ่งข้อมูลจำเพาะของ Fetch บอกเราว่าสามารถเกิดขึ้นได้ระหว่างการแยกวิเคราะห์ร่างกายหลังจากได้รับสถานะดังนั้นในทางทฤษฎีฉันคิดว่าเป็นไปได้ที่วัตถุ XHR จะมีสถานะ ตั้งค่าเป็น 200 จากนั้นพบข้อผิดพลาดหน่วยความจำไม่เพียงพอหรือบางสิ่งบางอย่างขณะรับร่างกายจึงเปลี่ยนสถานะกลับเป็น 0)
นอกจากนี้เรายังทราบในมาตรฐานการดึงข้อมูลว่ามีประเภทการตอบกลับอื่น ๆ อีกสองประเภทซึ่งสถานะถูกกำหนดให้เป็น 0 ซึ่งการมีอยู่เกี่ยวข้องกับคำขอข้ามแหล่งที่มาและนโยบายแหล่งกำเนิดเดียวกัน:
การตอบสนองที่กรองแบบทึบแสงคือการตอบสนองที่กรองแล้วซึ่ง ... สถานะคือ0
...
การตอบสนองที่กรองการเปลี่ยนเส้นทางทึบแสงคือการตอบสนองที่กรองซึ่งมี ... สถานะคือ0
...
(รายละเอียดอื่น ๆ อีกมากมายเกี่ยวกับประเภทการตอบกลับทั้งสองนี้ถูกละไว้)
แต่นอกเหนือจากนี้ยังมีอีกหลายกรณีที่อัลกอริทึมการดึงข้อมูล (แทนที่จะเป็นข้อมูลจำเพาะ XHR ซึ่งเราได้ดูไปแล้ว) เรียกร้องให้เบราว์เซอร์ส่งคืนข้อผิดพลาดของเครือข่าย! แท้จริงแล้ววลี "ส่งกลับข้อผิดพลาดของเครือข่าย" ปรากฏ40 ครั้งในมาตรฐานการดึงข้อมูล ฉันจะไม่พยายามแสดงรายการทั้งหมด 40 รายการที่นี่ แต่ฉันทราบว่าประกอบด้วย:
- กรณีที่ไม่รู้จักรูปแบบของคำขอ (เช่นพยายามส่งคำขอไปที่ madeupscheme: //foobar.com)
- คำสั่งที่คลุมเครืออย่างน่าอัศจรรย์ "หากมีข้อสงสัยโปรดส่งคืนข้อผิดพลาดของเครือข่าย" ในอัลกอริทึมสำหรับจัดการ ftp: // และ file: // URLs
- การเปลี่ยนเส้นทางไม่มีที่สิ้นสุด: "หากจำนวนการเปลี่ยนเส้นทางของคำขอเท่ากับยี่สิบแสดงข้อผิดพลาดของเครือข่าย"
- ปัญหาที่เกี่ยวข้องกับ CORS จำนวนมากเช่น "หากการตอบสนองของ httpRequest ไม่ใช่" cors "และการตรวจสอบนโยบายทรัพยากรข้ามแหล่งที่มาพร้อมกับคำขอและการตอบกลับที่ถูกบล็อกจากนั้นส่งคืนข้อผิดพลาดของเครือข่าย"
- การเชื่อมต่อล้มเหลว: "หากการเชื่อมต่อล้มเหลวให้ส่งคืนข้อผิดพลาดของเครือข่าย"
ในคำอื่น ๆ : เมื่อใดก็ตามที่มีอะไรผิดพลาดอื่น ๆกว่าการรหัสสถานะข้อผิดพลาด HTTP จริงเช่น 500 หรือ 400 จากเซิร์ฟเวอร์คุณจบลงด้วยแอตทริบิวต์สถานะของ 0 บนวัตถุ XHR หรือดึงข้อมูลวัตถุการตอบสนองในเบราว์เซอร์ จำนวนสาเหตุเฉพาะที่เป็นไปได้ที่ระบุไว้ในข้อมูลจำเพาะมีมากมาย
สุดท้าย: หากคุณสนใจประวัติของข้อมูลจำเพาะด้วยเหตุผลบางประการโปรดทราบว่าคำตอบนี้ได้รับการเขียนใหม่ทั้งหมดในปี 2020 และคุณอาจสนใจในการแก้ไขคำตอบนี้ก่อนหน้านี้ซึ่งแยกวิเคราะห์ข้อสรุปเดียวกันออกจากข้อมูลจำเพาะ W3 ที่เก่ากว่า (และง่ายกว่ามาก ) สำหรับ XHR ก่อนหน้านี้จะถูกแทนที่ด้วยข้อกำหนด WhatWG ที่ทันสมัยและซับซ้อนกว่าคำตอบนี้อ้างถึง