Kode status HTTP 0 - Domain Kesalahan = NSURLErrorDomain?

94

Saya sedang mengerjakan proyek iOS.

Dalam aplikasi ini, saya mengunduh gambar dari server.

Masalah:

Saat mendownload gambar saya mendapatkan Request Timeout . Menurut dokumentasi, kode status HTTP dari batas waktu permintaan adalah 408.

Tetapi dalam aplikasi saya, saya mendapatkan kode status HTTP 0dengan kesalahan berikut

Domain Kesalahan = NSURLErrorDomain Code = -1001 "Permintaan habis waktunya." 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 = Permintaan timed ., NSUnderlyingError = 0x13846870 "Waktu permintaan habis."}

Selama pencarian, melalui internet, saya tidak menemukan informasi tentang Kode Status HTTP 0.

Adakah yang bisa menjelaskan ini kepada saya?

Irfan DANISH
sumber
1
Mungkin juga terjadi karena pengembang Konten Campuran.mozilla.org/en-US/docs/Web/Security/Mixed_content
devasghar

Jawaban:

97

Tidak ada kode status HTTP 0. Yang Anda lihat adalah 0 yang dikembalikan oleh API / pustaka yang Anda gunakan. Anda harus memeriksa dokumentasi untuk itu.

Julian Reschke
sumber
7
IE10 memiliki bug aneh, ketika menerima kode status 401 atau 403, itu menafsirkannya sebagai kode status 0. Di kepala saya, kode status 0 adalah kesalahan karena jelas ada sesuatu yang salah.
Gaui
5
Gate way timeout akan menerima status 0 pada http error calll back, angulartutorial.net/2017/03/http-status-codes-and-meanings.html
Prashobh
Jawabannya salah. Kode status 0 ada ketika browser tidak dapat terhubung ke server. Ketika Anda mendapatkan kesalahan yang berbeda seperti misalnya 504 maka ini disebabkan oleh pengaturan proxy terbalik.
Nickon
Jawabannya benar. Tidak ada kode status HTTP 0. Anda mungkin melihatnya sebagai nilai kembali dari API, tetapi ini tidak akan muncul di dalam pesan tanggapan HTTP.
Julian Reschke
75

Kode status 0 dalam suatu NSHTTPURLResponseobjek secara umum berarti tidak ada respons, dan dapat terjadi karena berbagai alasan. Server tidak akan pernah mengembalikan status 0 karena ini bukan kode status HTTP yang valid.

Dalam kasus Anda, Anda muncul mendapatkan kode status 0 karena waktu permintaan habis dan 0 hanyalah nilai default untuk properti. Batas waktu itu sendiri bisa jadi karena berbagai alasan, seperti server tidak merespons tepat waktu, diblokir oleh firewall, atau seluruh koneksi jaringan Anda sedang tidak aktif. Biasanya dalam kasus yang terakhir meskipun ponsel cukup pintar untuk mengetahui itu tidak memiliki koneksi jaringan dan akan segera gagal. Namun, ini masih akan gagal dengan kode status 0.

Perhatikan bahwa dalam kasus di mana kode status adalah 0, kesalahan sebenarnya ditangkap di NSErrorobjek yang dikembalikan , bukan NSHTTPURLResponse.

Status HTTP 408sangat tidak umum menurut pengalaman saya. Saya sendiri belum pernah bertemu satu sama lain. Tetapi tampaknya digunakan dalam kasus di mana klien perlu mempertahankan koneksi soket aktif ke server, dan server menunggu klien untuk mengirim lebih banyak data melalui soket terbuka, tetapi tidak dalam waktu tertentu dan server mengakhiri koneksi dengan 408kode status, yang pada dasarnya memberi tahu klien "Anda terlalu lama".

devios1
sumber
1
Penjelasan yang sempurna.
CouchDeveloper
10

Responnya Kosong. Sebagian besar kasus kode akan statistik dengan 1xx, 2xx, 3xx, 4xx, 5xx.

Daftar kode status HTTP

VDN
sumber
Pada tautan yang Anda sediakan tidak ada informasi tentang Kode Status HTTP 0.
Irfan DANISH
10

Di iOS SDK Ketika API call time-out, Anda mendapatkan status 0 untuk itu.

Ankit Kumar Gupta
sumber
5

Dari pengalaman saya yang terbatas, saya akan mengatakan bahwa dua skenario berikut dapat menyebabkan respons status code: 0, perlu diingat; mereka bisa lebih, tapi saya tahu dari dua itu:

  • koneksi Anda mungkin merespons dengan lambat.
  • atau mungkin server back-end tidak tersedia.

masalahnya, status: 0agak umum, dan bisa jadi lebih banyak kasus penggunaan yang memicu isi respons kosong.

Solusi Sederhana
sumber
Ini adalah status API, bukan status HTTP. Jika tidak ada respons HTTP, tidak ada kode status HTTP di dalamnya.
Marquis dari Lorne
Kode status 0 tidak berarti bahwa ada Kode Respon HTTP tetapi mungkin menjadi masalah jika server Anda tidak tersedia.
Ravi
5

Kode status '0' dapat terjadi karena tiga alasan
1) Klien tidak dapat terhubung ke server
2) Klien tidak dapat menerima tanggapan dalam periode batas waktu
3) Permintaan "dihentikan (dibatalkan)" oleh Klien.

Tetapi ketiga alasan ini tidak dibakukan

Hariprasath Yadav
sumber
Apakah Anda punya sumber tentang itu?
rgoliveira
kode sumber apa pun dapat diterapkan untuk menguji dua poin pertama, Anda hanya perlu permintaan berbasis ajax. tetapi yang ketiga terjadi saat membatalkan permintaan pengguna, ini dapat dilakukan dengan membatalkan fungsi di jquery.
Hariprasath Yadav
4

Respons HTTP 0 bukan respons HTTP standar. Tetapi ini menunjukkan bahwa klien tidak dapat terhubung dengan server dan karenanya terjadi waktu habis.

shuaib ahmad
sumber
2

Kami mendapat kesalahan:

DAPATKAN http: //localhost/pathToWebSite/somePage.aspx memunculkan kesalahan http.status: 0

Panggilan itu dibuat dari tugas windows yang memanggil file VBS, jadi untuk memecahkan masalah, arahkan browser ke url dan kami mendapatkan Kesalahan Privasi:

Koneksi Anda tidak bersifat pribadi

Penyerang mungkin mencoba mencuri informasi Anda dari localhost (misalnya, sandi, pesan, atau kartu kredit). NET :: ERR_CERT_COMMON_NAME_INVALID

Laporkan secara otomatis detail kemungkinan insiden keamanan ke Google. Kebijakan privasi Kembali ke keamanan Server ini tidak dapat membuktikan bahwa ini adalah localhost; sertifikat keamanannya dari * .ourdomain.com. Ini mungkin disebabkan oleh kesalahan konfigurasi atau ada penyerang yang memotong sambungan Anda. Belajarlah lagi.

Ini karena kami memiliki aturan Penulisan Ulang URL IIS untuk memaksa koneksi menggunakan https. Aturan itu mengalihkan http: // localhost ke https: // localhost tetapi sertifikat SSL kami didasarkan pada nama domain yang menghadap ke luar bukan localhost, sehingga kesalahan yang dilaporkan sebagai kode status 0. Jadi kesalahan privasi bisa menjadi alasan yang sangat tidak jelas untuk kode status ini 0.

Dalam kasus kami, solusinya adalah menambahkan pengecualian ke aturan untuk localhost dan mengizinkan http: //localhost/pathToWebSite/somePage.aspx menggunakan http. Tidak jelas, ya, tapi saya akan membahasnya tahun depan dan sekarang saya akan menemukan jawaban saya di pencarian google.

Jeff Mergler
sumber
2

Kadang-kadang Browser menanggapi penangan kesalahan http dengan Objek Kesalahan, yang memiliki status disetel ke 0, bahkan jika Anda dapat melihat status kesalahan 404, 401, 500 dll di jaringan.

Ini dapat terjadi jika Aplikasi dan API Anda berada di domain yang berbeda - mekanisme CORS diterapkan. Menurut CORS untuk setiap browser permintaan API mengirimkan dua permintaan:

  1. Preflight OPTIONS meminta untuk memahami apakah API mengizinkan permintaan Aktual / Asal.
  2. ketika API memungkinkan (permintaan OPTIOS merespons dengan status 204 dan header Access-Control-Allow-Origin yang benar) - browser mengirim "permintaan Aktual / Asal" berikutnya.

Dalam Aplikasi kami menangani respons Kesalahan untuk "Permintaan Aktual / Asal", dan jika "permintaan OPTIONS preflight" gagal - browser tidak memberikan objek HttpError yang benar untuk penangan kesalahan http. Jadi untuk mendapatkan status tanggapan http yang benar - pastikan untuk mendapatkan tanggapan permintaan OPSI preflight yang sukses.

Dmitriy Kusch
sumber
-1

Di gerbang jalan waktu habis, status akan menjadi nol pada panggilan kembali kesalahan Anda.

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

Kode status HTTP

Prashobh
sumber