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 0
dengan 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?
sumber
Jawaban:
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.
sumber
Kode status 0 dalam suatu
NSHTTPURLResponse
objek 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
NSError
objek yang dikembalikan , bukanNSHTTPURLResponse
.Status HTTP
408
sangat 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 dengan408
kode status, yang pada dasarnya memberi tahu klien "Anda terlalu lama".sumber
Responnya Kosong. Sebagian besar kasus kode akan statistik dengan 1xx, 2xx, 3xx, 4xx, 5xx.
Daftar kode status HTTP
sumber
Di iOS SDK Ketika API call time-out, Anda mendapatkan status 0 untuk itu.
sumber
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:masalahnya,
status: 0
agak umum, dan bisa jadi lebih banyak kasus penggunaan yang memicu isi respons kosong.sumber
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
sumber
Respons HTTP 0 bukan respons HTTP standar. Tetapi ini menunjukkan bahwa klien tidak dapat terhubung dengan server dan karenanya terjadi waktu habis.
sumber
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:
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.
sumber
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:
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.
sumber
CORS dalam kasus saya.
Saya pernah mendapat tanggapan seperti itu di aplikasi iOS. Solusinya tidak ada
Access-Control-Allow-Origin: *
di header.Selengkapnya: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
sumber
Ini dapat terjadi dengan respons http 401 jika menggunakan NSURLConnection.
Lihat NSURLConnection mengembalikan kesalahan alih-alih respons untuk 401
sumber
Di gerbang jalan waktu habis, status akan menjadi nol pada panggilan kembali kesalahan Anda.
Kode status HTTP
sumber