API atsako Safari toje pačioje telefone, o programėlės užklausa baigiasi skirtuoju laiku. Šis skirtumas dažniausiai nėra tunelis: programa, kuri kviečia vidinę paslaugą, siunčia įprastą HTTPS užklausą, o įrenginyje jau esantis VPN tik nusprendžia, ar ta užklausa turi kelią. Antro tunelio įrašymas programėlėje yra produkto sprendimas, o ne skirtojo laiko taisymas. Toliau pateikiama klasifikacija pagal tai, kur gedimas įvyksta, naudojant klaidų paviršių, kurį programėlė jau turi.

Pradėkite nuo klaidos, o ne nuo tunelio

URLSession transportavimo gedimus praneša kaip NSError reikšmes NSURLErrorDomain srityje, o kodas yra pigiausias turimas įrodymas. Prieš keisdami bet kokią konfigūraciją, užregistruokite tą kodą kartu su nepavykusiu pagrindinio kompiuterio vardu ir užduoties praėjusiu laiku. Skirtasis laikas, vardo gedimas ir pasitikėjimo gedimas ekrane atrodo vienodai ir reikalauja trijų skirtingų taisymų. Pirmiausia suklasifikuokite, tada skaitykite tos klasės skyrių.

Užduoties metrikos atsako į kitą klausimą, ar ryšys apskritai buvo užmegztas, o tai atskiria užklausą, kuri niekada neturėjo maršruto, nuo tos, į kurią serveris atsakė per vėlai. Niekas iš to nereikalauja keisti tunelio; reikia išspausdinti pačios užklausos diagnostiką ten, kur galite ją perskaityti.

Vardų sprendimas nepavyksta anksčiau už visa kita

Trumpas biuro vardas, pavyzdžiui, api.corp.example paprastai priklauso nuo paieškos domeno, kurio telefonas neturi, todėl programėlė išsprendžia vardą, kuris egzistuoja tik pastato viduje. NSURLErrorCannotFindHost yra parašas. Visas pagrindinio kompiuterio vardas turi būti išspręstas per bet kurį sprendiklį, kurį įdiegia VPN, o programėlė turėtų prašyti visiškai kvalifikuotos formos, kai paieškos domenas negarantuotas. Vardo pakeitimas adresu ir sertifikatų patikrų išjungimas perkelia gedimą, o ne jį ištaiso.

Privatus DNS įrašas ir sertifikatas, išduotas būtent tam vardui, yra palaikoma pora. Visa kita yra apeities sprendimas, kuris pasiekia naudotojus.

Skirtasis laikas yra kelio, o ne vardo klausimas

NSURLErrorTimedOut reiškia, kad vardas buvo išspręstas ir niekas neatsakė, o tai rodo maršrutą, paketų politiką arba paslaugą. Kai tunelis priskiriamas kiekvienai programai, kita programa, pasiekianti tą patį serverį, nieko nesako apie jūsų rinkinį, nes tas susiejimas nėra bendras. Patikrinkite, ar vykdomas rinkinys yra to priskyrimo viduje, tada patikrinkite, ar paslaugos kelias jam leidžiamas. Už priskyrimo ribų įdiegtas kūrimo rinkinys gali būti visiškai už tunelio ir atrodyti kaip sugedęs API.

Naršyklės palyginimas parodo, kad kuri nors įrenginio programa turi kelią. Tai niekada neįrodo, kad jūsų rinkinys jį turi, todėl abu testai turi būti atliekami atskirai.

Pasitikėjimo gedimai susiję su sertifikate esančiu vardu

NSURLErrorServerCertificateUntrusted kartu su po juo esančia TLS klaida reiškia, kad grandinė arba tapatybės patikra nepavyko. Vidinė CA turi būti patikima įrenginyje, o sertifikatas, išduotas kitam pagrindinio kompiuterio vardui, lieka neteisingas po bet kokio tinklo perkonfigūravimo. Apple App Transport Security gairės toliau taikomos šiems URL įkeliantiems ryšiams, o tunelis aplink paprastą HTTP paslaugą nepadaro tos paslaugos saugios nuo galo iki galo.

Pataisykite tapatybę arba pasitikėjimo inkarą ir palikite išimčių sąrašą tuščią. Bendra savavališko įkėlimo išimtis slepia gedimą kūrimo metu ir palieka jį kiekvienam naudotojui vėliau.

HTTP atmetimas priklauso programėlei, o ne tinklui

401 arba 403 po užbaigto rankos paspaudimo reiškia, kad užklausa atėjo ir paslauga ją atmetė, todėl lieka klausimas dėl paskyros, prieigos rakto auditorijos, apimties arba rakto. Registruokite būsenos kodą ir pagrindinio kompiuterio vardą, niekada ne nešėjo raktą ar atsakymo turinį. Tuo metu tunelis atlieka savo darbą, o tolesni tinklo pakeitimai tik atitolina tikrąjį taisymą.

Lentelė yra klasifikacija, kurią verta laikyti šalia terminalo: viena eilutė kiekvienam gedimui, apie kurį programa tikrai gali pranešti. Išspausdinkite kodą prieš jį skaitydami, nes pasirinkta eilutė nulemia, kurią skiltį dirbsite.

Where it failsWhat the app seesFirst check
name resolutionNSURLErrorCannotFindHost (-1003)resolve the fully qualified name from the device itself
no path, or no answerNSURLErrorTimedOut (-1001)is this bundle inside the per-app mapping, and is the service path allowed
TLS trustNSURLErrorServerCertificateUntrusted (-1202)does the certificate name match the host, and is the internal CA trusted
service refusalHTTP 401 or 403 after a completed handshakeaccount, token audience, scope or key

Kiekvieną eilutę pigiau išbandyti nei tą, kuri yra po ja, ir kiekviena atmeta kitą tos pačios užklausos sluoksnį. Eikite lentele žemyn, kol eilutė atitiks, tada nustokite keisti tinklą.

Susiję straipsniai