HTTP durum kodu 0 - Hata Etki Alanı = NSURLErrorDomain?


94

Bir iOS projesi üzerinde çalışıyorum.

Bu uygulamada sunucudan resim indiriyorum.

Sorun:

Görüntüleri indirirken İstek Zaman Aşımı alıyorum . Dokümantasyona göre istek zaman aşımının HTTP durum kodu 408.

Ancak uygulamamda 0aşağıdaki hatayla HTTP durum kodunu alıyorum

Hata Etki Alanı = NSURLErrorDomain Kodu = -1001 "İstek zaman aşımına uğradı." UserInfo = 0xb9af710 {NSErrorFailingURLStringKey = http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg , NSErrorFailingURLKey = http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg , NSLocalizedDescription = İstek ., NSUnderlyingError = 0x13846870 "İstek zaman aşımına uğradı."}

İnternet üzerinden yapılan bir arama sırasında HTTP Durum Kodu 0 hakkında hiçbir bilgi bulamadım.

Bunu bana kimse açıklayabilir mi?



Yanıtlar:


98

Hiçbir HTTP durum kodu 0 yok. Gördüğünüz, kullandığınız API / kitaplık tarafından döndürülen bir 0'dır. Bunun için belgeleri kontrol etmeniz gerekecek.


7
IE10'un tuhaf bir hatası var, 401 veya 403 durum kodunu alırken, bunu durum kodu 0 olarak yorumluyor. Kafamda, durum kodu 0 bir hatadır çünkü açıkça bir şeyler yanlıştır.
Gaui

5
Geçit yolu zaman aşımı, http error calll
Prashobh

Cevap yanlış. Tarayıcı, sunucuya bağlanamadığında durum kodu 0 mevcuttur. Örneğin 504 gibi farklı hatalar aldığınızda, bu ters proxy ayarlarından kaynaklanır.
Nickon

Cevap doğru. Hiçbir HTTP durum kodu 0 yok. Bunu bir API'den dönüş değeri olarak görebilirsiniz, ancak bir HTTP yanıt mesajında ​​oluşmayacaktır.
Julian Reschke

76

Bir NSHTTPURLResponsenesnede 0 durum kodu genellikle yanıt olmadığı anlamına gelir ve çeşitli nedenlerle ortaya çıkabilir. Bu geçerli bir HTTP durum kodu olmadığından, sunucu hiçbir zaman 0 durumu döndürmez.

Senin durumda, vardır görünen istek zaman aşımına uğruyorsa, çünkü 0 bir durum kodu almak için ve 0 özellik için sadece varsayılan değerdir. Zaman aşımının kendisi, sunucunun zamanında yanıt vermemesi, bir güvenlik duvarı tarafından engellenmesi veya tüm ağ bağlantınızın kesilmesi gibi çeşitli nedenlerle olabilir. Genellikle ikincisi durumunda, telefon bir ağ bağlantısı olmadığını bilecek kadar akıllı olsa da, hemen başarısız olur. Ancak, görünür durum kodu 0 ile yine de başarısız olacaktır.

Durum kodunun 0 olduğu durumlarda, gerçek hatanın döndürülen NSErrornesnede yakalandığını NSHTTPURLResponse,.

408Deneyimlerime göre HTTP durumu oldukça nadirdir. Kendimle hiç karşılaşmadım. Ancak, istemcinin sunucuya aktif bir soket bağlantısı sürdürmesi gerektiği ve sunucunun istemcinin açık soket üzerinden daha fazla veri göndermesini beklediği, ancak belirli bir süre içinde olmadığı ve sunucu bağlantıyı bir 408durum koduyla sonlandırır ve istemciye "çok uzun sürdüğünü" söyler.


1
Mükemmel açıklama.
CouchDeveloper


10

İOS SDK'da API çağrınız zaman aşımına uğradığında, bunun için 0 durumunu alırsınız.


5

Sınırlı deneyimlerime göre, aşağıdaki iki senaryonun tepkiye neden olabileceğini söyleyebilirim, status code: 0aklınızda bulundurun; daha fazla olabilirler, ama bu ikisini biliyorum:

  • bağlantınız yavaş yanıt veriyor olabilir.
  • veya belki de arka uç sunucusu kullanılamıyor.

mesele şu ki, status: 0biraz geneldir ve boş bir yanıt gövdesini tetikleyen daha fazla kullanım durumu olabilir.


Bu bir API durumu, HTTP durumu değil. HTTP yanıtı yoksa, içinde HTTP durum kodu yoktu.
Marquis of Lorne

Durum kodu 0, HTTP Yanıt Kodu olduğu anlamına gelmez, ancak sunucunuz kullanılamıyorsa sorun olabilir.
Ravi

5

Durum kodu '0' üç nedenden dolayı oluşabilir
1) Müşteri sunucuya bağlanamaz
2) Müşteri zaman aşımı süresi içinde yanıtı alamaz
3) İstek Müşteri tarafından "durduruldu (iptal edildi)" .

Ancak bu üç neden standart değil


Bununla ilgili herhangi bir kaynağınız var mı?
rgoliveira

herhangi bir kaynak kodu ilk iki noktayı test etmek için geçerlidir, sadece ajax tabanlı bir istek gerekir. ancak üçüncüsü kullanıcı talebini iptal ederken oluyor, bu jquery'de iptal fonksiyonu ile yapılabilir.
Hariprasath Yadav

4

HTTP yanıtı 0, standart HTTP yanıtı değildir. Ancak, istemcinin sunucuya bağlanamadığını ve dolayısıyla zaman aşımının gerçekleştiğini gösterir.


2

Hatayı aldık:

GET http: //localhost/pathToWebSite/somePage.aspx http.status: 0 hatası verdi

Bu çağrı, bir VBS dosyasını çağıran Windows görevinden yapılır, bu nedenle sorunu gidermek için, URL'ye bir tarayıcı işaret etti ve bir Gizlilik Hatası alıyoruz:

Bağlantınız özel değil

Saldırganlar bilgilerinizi localhost'tan çalmaya çalışıyor olabilir (örneğin, şifreler, mesajlar veya kredi kartları). NET :: ERR_CERT_COMMON_NAME_INVALID

Olası güvenlik olaylarının ayrıntılarını Google'a otomatik olarak bildirin. Gizlilik ilkesi Güvenliğe geri dön Bu sunucu localhost olduğunu kanıtlayamadı; güvenlik sertifikası * .ourdomain.com'dan. Bunun nedeni bir yanlış yapılandırma veya bağlantınıza müdahale eden bir saldırgan olabilir. Daha fazla bilgi edin.

Bunun nedeni, bağlantıları https kullanmaya zorlamak için ayarlanmış bir IIS URL Yeniden Yazma kuralımız olmasıdır. Bu kural yönlendirmeleri http: // localhost için https: // localhost ama bizim SSL sertifika dış bakan alan adlarına göre değil localhost, durum kodu 0 olarak rapor edilir ve böylece hata Gizlilik hatası çok karanlık nedeni olabilir Yani bu durum kodu için 0.

Bizim durumumuzda çözüm, localhost kuralına bir istisna eklemek ve http: //localhost/pathToWebSite/somePage.aspx'in http kullanmasına izin vermekti . Anlaşılmaz, evet, ama önümüzdeki yıl bununla karşılaşacağım ve şimdi cevabımı bir google aramasında bulacağım.


2

Bazen Tarayıcı, ağda 404, 401, 500 vb. Hata durumunu görebilseniz bile, durumu 0 olarak ayarlanmış Hata Nesnesi ile http hata işleyicisine yanıt verir.

Uygulamanız ve API'niz farklı alan adlarında ise bu gerçekleşebilir - CORS mekanizması uygulanır. CORS'a göre her API isteği için tarayıcı iki istek gönderir:

  1. ön kontrol SEÇENEKLERİ API'nin Gerçek / Kaynak isteğine izin verip vermediğini anlamak için istek.
  2. API izin verdiğinde (OPTIOS isteği, durum 204 ve doğru Erişim-Kontrol-İzin Verme başlıklarıyla yanıt verir) - tarayıcı sonraki "Gerçek / Kaynak isteği" gönderir.

Uygulamada "Gerçek / Kaynak isteği" için Hata yanıtını ele alıyoruz ve "ön kontrol SEÇENEKLERİ isteği" başarısız olursa - tarayıcı http hata işleyicisi için doğru HttpError nesnesini vermiyor. Bu nedenle, http yanıtının doğru durumunu elde etmek için - başarılı ön kontrol SEÇENEKLERİ istek yanıtı aldığınızdan emin olun.




-1

Geçit yolu zaman aşımına uğradığında, geri arama hatanızda durum sıfır olacaktır.

.error( function( data,status,headers,config){
    console.log(status) 
 }

HTTP durum kodları

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.