Kısa cevap
Bu bir HTTP yanıt kodu değildir, ancak WhatWG tarafından XMLHttpRequest
bir Getirme yanıtının durum özniteliği için geçerli bir değer olarak belgelenmiştir .
Genel olarak, rapor edilecek gerçek HTTP durum kodu olmadığında ve / veya isteği gönderirken veya yanıtı alırken bir hata oluştuğunda kullanılan varsayılan bir değerdir . Durumun böyle olduğu olası senaryolar aşağıdakileri içerir, ancak bunlarla sınırlı değildir:
- İstek henüz gönderilmedi veya iptal edildi.
- Tarayıcı hala yanıt durumunu ve başlıkları almayı bekliyor.
- İstek sırasında bağlantı kesildi.
- İstek zaman aşımına uğradı.
- İstek, sonsuz bir yeniden yönlendirme döngüsüyle karşılaştı.
- Tarayıcı yanıt durumunu bilir, ancak Aynı Köken Politikasıyla ilgili güvenlik kısıtlamaları nedeniyle ona erişmenize izin verilmiyor .
Uzun cevap
İlk olarak tekrarlamak gerekirse: 0 bir HTTP durum kodu değildir. RFC 7231 Bölüm 6.1'de 0'ı içermeyen tam bir liste var ve bölüm 6'ya giriş açıkça şunu belirtiyor:
Durum kodu öğesi, üç basamaklı bir tam sayı kodudur
hangi 0 değildir.
Bununla birlikte, .status
bir XMLHttpRequest nesnesinin özniteliğinin değeri olarak 0, tüm ilgili ayrıntıları izlemek biraz zor olsa da belgelenmiştir. Https://xhr.spec.whatwg.org/#the-status-attribute adresinden başlayarak, .status
basitçe şunu belirten özniteliği belgeliyoruz :
status
Nitelik dönmelidir yanıtın ‘ın durumunu .
Bu anlamsız ve totolojik gelebilir, ancak gerçekte burada bilgi var! Bu dokümantasyonun burada bir yanıttan değil bir .response
özniteliğinden bahsettiğini unutmayın, bu XMLHttpRequest
nedenle bu bize bir XHR nesnesindeki durumun tanımının Getirme spesifikasyonundaki bir yanıtın durumunun tanımına ertelendiğini söyler.
Ama hangi tepki nesnesi? Ya gerçekten bir yanıt almadıysak? "Response" kelimesinin üzerindeki satır içi bağlantı bizi https://xhr.spec.whatwg.org/#response adresine götürür ve bu da şunu açıklar:
An'ın XMLHttpRequest
ilişkili bir yanıtı vardır. Aksi belirtilmedikçe bu bir ağ hatasıdır .
Dolayısıyla durumunu aldığımız yanıt varsayılan olarak bir ağ hatasıdır. XHR spesifikasyonunda "yanıtı ayarla" ifadesinin kullanıldığı her yerde arama yaptığımızda, beş yerde ayarlandığını görebiliriz:
Getirme standardına baktığımızda şunu görebiliriz:
Bir ağ hatası bir olan yanıtı kimin durumu her zaman0
böylece XHR spesifikasyonunun yanıtın bir ağ hatasına ayarlanması gerektiğini söylediği herhangi bir durumda bir XHR nesnesinde 0 durumunu göreceğimizi hemen söyleyebiliriz. (İlginçtir ki, bu, Getirme spesifikasyonunun bize durumu aldıktan sonra bedeni ayrıştırırken olabileceğini söylediği vücudun akışının "hatalı" olduğu durumu içerir - bu yüzden teoride bir XHR nesnesinin statüsüne sahip olmasının mümkün olduğunu düşünüyorum. 200 olarak ayarlayın, ardından vücudu alırken bir yetersiz bellek hatası veya başka bir şeyle karşılaşın ve bu nedenle durumunu 0 olarak değiştirin.)
Getirme standardında, durumu 0 olarak tanımlanan, varlıkları çapraz kaynaklı isteklerle ve aynı kaynak politikasıyla ilgili olan birkaç başka yanıt türünün de bulunduğunu da not ediyoruz:
Opak filtrelenmiş yanıt, durumu ... olan filtrelenmiş bir yanıttır0
.
Opak yeniden yönlendirme filtreli yanıt, durumu ... olan filtrelenmiş bir yanıttır0
.
(bu iki yanıt türü hakkında çeşitli diğer ayrıntılar atlanmıştır).
Ancak bunların ötesinde, Getirme algoritmasının (daha önce incelediğimiz XHR spesifikasyonu yerine) tarayıcının bir ağ hatası döndürmesini istediği birçok durum da vardır ! Aslında, "bir ağ hatası döndür" ifadesi , Getirme standardında 40 kez görünür . Burada 40'ın hepsini listelemeye çalışmayacağım, ancak şunları içerdiğini not ediyorum:
- Talebin planının tanınmadığı durum (ör. Madeupscheme: //foobar.com'a bir istek göndermeye çalışmak)
- Olağanüstü belirsiz talimat "Şüpheniz varsa, bir ağ hatası verin." ftp: // ve file: // URL'leri işleme algoritmalarında
- Sonsuz yönlendirmeler: "İsteğin yeniden yönlendirme sayısı yirmi ise, bir ağ hatası döndür."
- "HttpRequest'in yanıt lekelenmesi" cors "değilse ve istek ve yanıt dönüşleri engellenmiş çapraz kaynak ilkesi denetimi, ardından bir ağ hatası döndür." Gibi CORS ile ilgili bir dizi sorun.
- Bağlantı hataları: "Eğer bağlantı başarısızlık, bir ağ hata döndürür."
Başka bir deyişle: bir şey yanlış gittiğinde diğer sunucudan 500 veya 400 gibi gerçek HTTP hata durum kodu almak yerine, sizin XHR nesne üzerinde 0 bir durum özniteliği ile sona veya tarayıcıda tepki nesne getir. Spesifikasyonda numaralandırılan olası spesifik nedenlerin sayısı çok fazladır.
Son olarak: Eğer spesifikasyonun geçmişiyle ilgileniyorsanız, bu cevabın 2020'de tamamen yeniden yazıldığını ve bu cevabın önceki revizyonunun ilginizi çekebileceğini unutmayın; bu , esasen aynı sonuçları ayrıştırır. XHR için daha eski (ve çok daha basit) W3 spesifikasyonu, daha modern ve daha karmaşık WhatWG spesifikasyonları ile değiştirilmeden önce, bu cevapların bahsettiği.