VPN orqali iPhone ilovasidan ichki API ni qanday chaqirish kerak
Muvaffaqiyatsiz so'rovni tunnelga tegmasdan oldin uning NSURLError kodi bo'yicha tasniflang, so'ng haqiqatan buzilgan qatlamni tuzating.
API xuddi shu telefonda Safari'da javob beradi, ilova so'rovi esa vaqt tugashi bilan yakunlanadi. Bu farq odatda tunnel emas: ichki xizmatni chaqiradigan ilova oddiy HTTPS so'rov yuboradi va qurilmadagi mavjud VPN faqat bu so'rovning yo'li bor-yo'qligini hal qiladi. Ilovaga ikkinchi tunnel yozish mahsulot qaroridir, vaqt tugashi uchun tuzatish emas. Quyidagilar nosozlikni qayerda sodir bo'lishiga ko'ra tasniflaydi va ilovada allaqachon mavjud bo'lgan xato yuzasidan foydalanadi.
Tunneldan emas, xatodan boshlang
URLSession transport nosozliklarini NSError qiymatlari sifatida NSURLErrorDomain ichida xabar qiladi va kod eng arzon mavjud dalildir. Har qanday konfiguratsiyani o'zgartirishdan oldin bu kodni muvaffaqiyatsiz xost nomi va topshiriqning o'tgan vaqti bilan birga jurnalga yozing. Vaqt tugashi, nom nosozligi va ishonch nosozligi ekranda bir xil ko'rinadi va uch xil tuzatishni talab qiladi. Avval tasniflang, so'ng o'sha sinf bo'limini o'qing.
Topshiriq ko'rsatkichlari keyingi savolga javob beradi, ulanish umuman o'rnatilganmi, bu hech qachon yo'li bo'lmagan so'rovni server juda kech javob bergan so'rovdan ajratadi. Bularning hech biri tunnelni o'zgartirishni talab qilmaydi; so'rovning o'z diagnostikasi siz o'qiy oladigan joyda chop etilishini talab qiladi.
Nomlarni hal qilish hamma narsadan oldin muvaffaqiyatsiz bo'ladi
Masalan, api.corp.example kabi qisqa ofis nomi odatda telefonda bo'lmagan qidiruv domeniga bog'liq, shuning uchun ilova faqat bino ichida mavjud bo'lgan nomni hal qiladi. NSURLErrorCannotFindHost bu uning imzosi. To'liq xost nomi VPN o'rnatgan har qanday resolver orqali hal qilinishi kerak va qidiruv domeni kafolatlanmagan har safar ilova to'liq malakali shaklni so'rashi kerak. Nomni manzil bilan almashtirish va sertifikat tekshiruvlarini o'chirish nosozlikni tuzatish o'rniga ko'chiradi.
Xususiy DNS yozuvi va aynan shu nom uchun berilgan sertifikat qo'llab-quvvatlanadigan juftlikdir. Qolgan hamma narsa foydalanuvchilarga yetib boradigan vaqtinchalik choradir.
Vaqt tugashi nom emas, yo'l masalasidir
NSURLErrorTimedOut nom hal qilinganini va hech narsa javob bermaganini bildiradi, bu marshrut, paket siyosati yoki xizmatga ishora qiladi. Tunnel har bir ilovaga tayinlanganda, xuddi shu serverga yetib boradigan boshqa ilova sizning build haqingizda hech narsa demaydi, chunki bu xaritalash umumiy emas. Ishlayotgan paketingiz o'sha tayinlash ichida ekanini tekshiring, so'ng xizmat yo'li unga ruxsat etilganini tekshiring. Tayinlashdan tashqarida o'rnatilgan ishlab chiqish buildi tunneldan butunlay tashqarida bo'lishi va buzilgan API kabi ko'rinishi mumkin.
Brauzerdagi taqqoslash qurilmadagi qaysidir ilovaning yo'li borligini ko'rsatadi. Bu hech qachon sizning buildingizda borligini isbotlamaydi, shuning uchun ikkala test alohida o'tkazilishi kerak.
Ishonch nosozliklari sertifikatdagi nomga taalluqlidir
NSURLErrorServerCertificateUntrusted uning ostidagi TLS xatosi bilan birga zanjir yoki shaxs tekshiruvi muvaffaqiyatsiz bo'lganini bildiradi. Ichki CA qurilmada ishonchli bo'lishi kerak va boshqa xost nomi uchun berilgan sertifikat har qanday tarmoq qayta sozlanishidan keyin ham noto'g'ri qoladi. Apple'ning App Transport Security qo'llanmasi ushbu URL yuklaydigan ulanishlarga hali ham taalluqli va oddiy HTTP xizmati atrofidagi tunnel bu xizmatni oxiridan oxirigacha xavfsiz qilmaydi.
Shaxs yoki ishonch langarini tuzating va istisnolar ro'yxatini bo'sh tuting. O'zboshimchalik bilan yuklash uchun umumiy istisno nosozlikni ishlab chiqish paytida yashiradi va keyin har bir foydalanuvchi uchun joyida qoldiradi.
HTTP rad etishi ilovaga tegishli, tarmoqqa emas
Tugallangan qo'l siqishdan keyin 401 yoki 403 so'rov yetib kelganini va xizmat uni rad etganini bildiradi, shuning uchun qolgan savol hisob, token auditoriyasi, qamrov yoki kalitdir. Holat kodini va xost nomini yozib oling, hech qachon tashuvchi tokenni yoki javob tanasini emas. O'sha paytda tunnel o'z ishini qilyapti va keyingi tarmoq o'zgarishlari faqat haqiqiy tuzatishni kechiktiradi.
Jadval terminal yonida saqlanadigan tasnifdir: ilova haqiqatan xabar bera oladigan har bir nosozlik uchun bitta qator. Kodni o'qishdan oldin chop eting, chunki tanlagan qatoringiz qaysi bo'lim ustida ishlashingizni hal qiladi.
| Where it fails | What the app sees | First check |
|---|---|---|
| name resolution | NSURLErrorCannotFindHost (-1003) | resolve the fully qualified name from the device itself |
| no path, or no answer | NSURLErrorTimedOut (-1001) | is this bundle inside the per-app mapping, and is the service path allowed |
| TLS trust | NSURLErrorServerCertificateUntrusted (-1202) | does the certificate name match the host, and is the internal CA trusted |
| service refusal | HTTP 401 or 403 after a completed handshake | account, token audience, scope or key |
Har bir qator ostidagidan arzonroq sinovdan o'tkaziladi va har biri bir xil so'rovning boshqa qatlamini istisno qiladi. Qator mos kelguncha jadval bo'ylab pastga tushing, so'ng tarmoqni o'zgartirishni to'xtating.