Nola deitu barneko API bati iPhone aplikaziotik VPN bidez
Sailkatu huts egiten duen eskaera haren NSURLError kodearen arabera tunela ukitu aurretik, eta gero konpondu benetan hautsi den geruza.
APIak Safari-n erantzuten du telefono berean, eta aplikazioaren eskaerak denbora-muga gainditzen du. Hutsune hori normalean ez da tunela: barneko zerbitzu bat deitzen duen aplikazioak HTTPS eskaera arrunta egiten du, eta gailuan dagoen VPNak soilik erabakitzen du eskaera horrek bide bat duen ala ez. Aplikazioan bigarren tunel bat idaztea produktu-erabakia da, ez denbora-muga baterako konponketa. Hurrengoak hutsa non gertatzen den sailkatzen du, aplikazioak jada duen erro-azalera erabiliz.
Hasi errorean, ez tunelean
URLSession garraio-hutsegiteak honela jakinarazten ditu: NSError balioak NSURLErrorDomain barruan, eta kodea da eskuragarri dagoen frogarik merkeena. Edozein konfigurazio aldatu aurretik, erregistratu kode hori huts egiten duen ostalari-izenarekin eta zereginaren igarotako denborarekin. Denbora-muga batek, izen-hutsegite batek eta konfiantza-hutsegite batek berdin dirudite pantailan eta hiru konponketa desberdin eskatzen dituzte. Sailkatu lehenengo, gero irakurri klase horretarako atala.
Zereginaren metrikek hurrengo galderari erantzuten diote, inoiz konexiorik ezarri zen, eta horrek biderik inoiz izan ez zuen eskaera bat zerbitzariak erantzuteko denbora gehiegi hartu zuen eskaera batetik bereizten du. Horietako ezerk ez du tunela aldatzea eskatzen; eskaeraren beraren diagnostikoak irakur dezakezun leku batean inprimatzea eskatzen du.
Izen-ebazpenak huts egiten du beste edozerk baino lehen
Bulegoko izen labur batek, adibidez api.corp.example, normalean telefonuak eramaten ez duen bilaketa-domeinu baten mende egon ohi da, beraz aplikazioak eraikinaren barruan soilik dagoen izen bat ebazten du. NSURLErrorCannotFindHost da sinadura. Ostalari-izen osoa VPNak instalatzen duen resolver edozein dela ere ebazten da, eta aplikazioak forma guztiz kualifikatua eskatu behar du bilaketa-domeinua bermatuta ez dagoen bakoitzean. Izena helbide batekin ordezkatzeak eta ziurtagiri-egiaztapenak desgaitzeak hutsa mugitzen du, ez du konpontzen.
DNS erregistro pribatu bat eta izen zehatz horretarako jaulkitako ziurtagiri bat dira onartutako bikotea. Gainerako guztia erabiltzaileengana iristen den lan-ingurubidea da.
Denbora-muga bidearen kontua da, ez izenaren kontua
NSURLErrorTimedOut esan nahi du izena ebatzi zela eta ezerk ez zuela erantzun, eta horrek bidera, pakete-politikara edo zerbitzura eramaten du. Tunela aplikazio bakoitzeko esleitzen denean, zerbitzari berbera iristen den beste aplikazio batek ez du zure konpilazioari buruz ezer esaten, mapaketa hori partekatzen ez delako. Egiaztatu exekutatzen ari zaren paketea esleipen horren barruan dagoela, eta gero egiaztatu zerbitzuaren bidea onartuta dagoela harentzat. Esleipenetik kanpo instalatutako garapen-konpilazio bat tunelaren erabat kanpo egon daiteke eta API hautsia bezala itxura izan dezake.
Nabigatzaileko konparazio batek erakusten du gailuko aplikazioren batek bidea duela. Inoiz ez du frogatzen zure konpilazioak baduenik, eta horregatik bi probak bereizita egin behar dira.
Konfiantza-hutsegiteak ziurtagiriko izenari buruzkoak dira
NSURLErrorServerCertificateUntrusted azpian duen TLS errorearekin batera, katea edo identitate-egiaztapena huts egin duela esan nahi du. Barneko CA bat gailuan fidagarria izan behar da, eta beste ostalari-izen baterako jaulkitako ziurtagiri bat okerra da oraindik sarearen berkonfigurazio guztien ondoren. Apple-en App Transport Security gida URL-a kargatzen duten konexio hauei aplikatzen zaie oraindik, eta HTTP zerbitzu arrunt baten inguruko tunel batek ez du zerbitzu hori muturretik muturrera seguru bihurtzen.
Konpondu identitatea edo konfiantza-ankra eta mantendu salbuespen-zerrenda hutsik. Karga arbitrariorako salbuespen orokorrak hutsa ezkutatzen du garapenean eta geroago erabiltzaile bakoitzarentzat lekuan uzten du.
HTTP ukapen bat aplikazioari dagokio, ez sareari
Esku-emate osatu ondorengo 401 edo 403 batek eskaera iritsi zela eta zerbitzuak ukatu zuela esan nahi du, beraz gainerako galdera kontu bat, token-ikuslego bat, esparru bat edo gako bat da. Erregistratu egoera-kodea eta ostalari-izena, inoiz ez bearer tokena edo erantzun-gorputza. Puntu horretan tunelak bere lana egiten du eta sare-aldaketa gehiagok benetako konponketa atzeratzen dute soilik.
Taula terminalaren ondoan edukitzeko sailkapena da: errenkada bat aplikazioak benetan jakinaraz dezakeen hutsegite bakoitzeko. Inprimatu kodea irakurri aurretik, aukeratzen duzun errenkadak erabakitzen baitu zein atal landuko duzun.
| 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 |
Errenkada bakoitza azpikoa baino merkeagoa da probatzeko, eta bakoitzak eskaera beraren geruza desberdin bat baztertzen du. Jaitsi taulan zehar errenkada bat bat etorri arte, eta gero utzi sareari aldatzen.