Hvernig á að kalla á innra API frá iPhone-forriti gegnum VPN
Flokkaðu misheppnaða beiðnina eftir NSURLError-kóðanum hennar áður en þú snertir göngin og lagaðu síðan nákvæmlega það lag sem bilaði.
API-ið svarar í Safari á sama síma, en beiðni forritsins rennur út á tíma. Þetta bil er venjulega ekki göngin: forrit sem kallar á innri þjónustu sendir venjulega HTTPS-beiðni, og VPN-ið sem þegar er í tækinu ákveður aðeins hvort sú beiðni hefur leið. Að skrifa önnur göng inn í forritið er vöruákvörðun, ekki viðgerð fyrir tímann. Það sem hér fer á eftir flokkar bilunina eftir því hvar hún verður, með því að nota villuflötinn sem forritið hefur þegar.
Byrjaðu á villunni, ekki göngunum
URLSession tilkynnir flutningsbilanir sem NSError gildi í NSURLErrorDomain, og kóðinn er ódýrasta sönnunin sem völ er á. Áður en þú breytir einhverri uppsetningu skaltu skrá þann kóða ásamt bilaða hýsilnafninu og liðnum tíma verkefnisins. Tími sem rennur út, nafnbilun og traustbilun líta eins út á skjánum og krefjast þriggja mismunandi viðgerða. Flokkaðu fyrst og lestu síðan hlutann fyrir þann flokk.
Mælikvarðar verkefnisins svara næstu spurningu, hvort tenging hafi nokkurn tíma verið komin á, sem aðgreinir beiðni sem hafði aldrei leið frá þeirri sem þjóninum tók of langan tíma að svara. Ekkert af þessu krefst breytinga á göngunum; það krefst þess að greiningar beiðninnar sjálfrar séu prentaðar þar sem þú getur lesið þær.
Nafnupplausn bregst áður en hvað annað getur
Stutt skrifstofuheiti eins og api.corp.example fer venjulega eftir leitarléni sem síminn ber ekki, svo forritið leysir nafn sem er aðeins til inni í byggingunni. NSURLErrorCannotFindHost er undirskriftin. Fulla hýsilnafnið verður að leysa í gegnum hvaða leysi sem VPN-ið setur upp, og forritið ætti að biðja um fullgilt formið hvenær sem leitarlénið er ekki tryggt. Að skipta nafninu út fyrir vistfang og slökkva á skírteinaathugunum færir bilunina í stað þess að laga hana.
Einkaskrá DNS og skírteini útgefið fyrir nákvæmlega það nafn eru studda parið. Allt annað er vinnufyrirkomulag sem berst til notenda.
Tími sem rennur út er spurning um leið, ekki um nafn
NSURLErrorTimedOut þýðir að nafnið leystist og ekkert svaraði, sem bendir á leiðina, pakkastefnuna eða þjónustuna. Þegar göngunum er úthlutað fyrir hvert forrit segir annað forrit sem nær í sama þjón ekkert um smíðið þína, því sú vörpun er ekki sameiginleg. Athugaðu að pakkinn sem þú keyrir sé innan þeirrar úthlutunar, athugaðu síðan að leið þjónustunnar sé leyfð fyrir hann. Þróunarsmíði uppsett utan úthlutunarinnar getur legið alveg utan göngunnar og litið út eins og bilað API.
Samanburður í vafra sýnir að eitthvert forrit í tækinu hefur leið. Hann sannar aldrei að þitt smíði hafi hana, þess vegna verður að keyra prófin tvö sitt í hvoru lagi.
Traustbilanir snúast um nafnið á skírteininu
NSURLErrorServerCertificateUntrusted ásamt TLS-villunni undir því þýðir að keðjan eða auðkenningarathugunin brást. Innra CA verður að vera treyst í tækinu, og skírteini útgefið fyrir annað hýsilnafn er enn rangt eftir hversu mikla netuppsetningu sem er. leiðbeiningar App Transport Security gilda áfram um þessar URL-hlaðandi tengingar, og göng utan um venjulega HTTP-þjónustu gera þá þjónustu ekki örugga frá enda til enda.
Lagaðu auðkennið eða traustankarinn og hafðu undantekningalistann tóman. Almennt undantekning fyrir handahófskennda hleðslu felur bilunina meðan á þróun stendur og lætur hana standa fyrir hvern notanda eftir á.
HTTP-höfnun tilheyrir forritinu, ekki netinu
401 eða 403 eftir lokið handaband þýðir að beiðnin kom og þjónustan hafnaði henni, svo spurningin sem eftir er er reikningur, áhorfendur tákn, umfang eða lykill. Skráðu stöðukóðann og hýsilnafnið, aldrei burðartáknið eða svarlíkamann. Á þeim tímapunkti er VPN-ið að gera sitt og frekari netbreytingar tefja aðeins raunverulegu viðgerðina.
Taflan er flokkunin sem á að hafa við hlið stjórnborðsins: ein röð fyrir hverja bilun sem forritið getur raunverulega tilkynnt. Prentaðu kóðann áður en þú lest hann, því röðin sem þú velur ræður því hvaða hlut þú vinnur í gegnum.
| 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 |
Hver röð er ódýrari að prófa en sú fyrir neðan, og hver útilokar annað lag af sömu beiðni. Farðu niður töfluna þar til röð passar, og hættu þá að breyta netinu.