Sut i alw API mewnol o ap iPhone dros VPN
Dosbarthwch y cais sy'n methu yn ôl ei god NSURLError cyn cyffwrdd â'r twnnel, yna trwsiwch yr union haen a dorrodd.
Mae'r API yn ateb yn Safari ar yr un ffôn, tra bo cais yr ap yn rhedeg allan o amser. Nid y twnnel yw'r bwlch hwnnw fel arfer: mae ap sy'n galw gwasanaeth mewnol yn gwneud cais HTTPS cyffredin, a dim ond penderfynu a oes llwybr i'r cais hwnnw y mae'r VPN sydd eisoes ar y ddyfais yn ei wneud. Mae ysgrifennu ail dwnnel i'r ap yn benderfyniad cynnyrch, nid yn atgyweiriad ar gyfer goramser. Mae'r hyn sy'n dilyn yn dosbarthu'r methiant yn ôl lle mae'n digwydd, gan ddefnyddio'r wyneb gwallau sydd eisoes gan yr ap.
Dechreuwch o'r gwall, nid o'r twnnel
URLSession yn adrodd methiannau cludo fel NSError gwerthoedd yn NSURLErrorDomain, a'r cod yw'r dystiolaeth rwydaf sydd ar gael. Cyn newid unrhyw ffurfweddiad, cofnodwch y cod hwnnw gyda'r enw gwesteiwr sy'n methu ac amser aeth heibio'r dasg. Mae goramser, methiant enw a methiant ymddiriedaeth yn edrych yn union yr un fath ar y sgrin ac yn gofyn am dri atgyweiriad gwahanol. Dosbarthwch yn gyntaf, yna darllenwch yr adran ar gyfer y dosbarth hwnnw.
Mae metrigau tasg yn ateb y cwestiwn nesaf, a fu cysylltiad erioed, sy'n gwahanu cais na chafodd lwybr erioed oddi wrth un y bu'r gweinydd yn rhy hir yn ateb. Nid oes angen newid y twnnel ar gyfer hyn; mae angen argraffu diagnosteg y cais ei hun yn rhywle y gallwch ei darllen.
Mae datrys enwau yn methu cyn y gall unrhyw beth arall
Enw swyddfa byr fel api.corp.example fel arfer yn dibynnu ar barth chwilio nad yw'r ffôn yn ei gario, felly mae'r ap yn datrys enw nad yw'n bodoli ond y tu mewn i'r adeilad. NSURLErrorCannotFindHost yw'r llofnod. Rhaid datrys yr enw gwesteiwr llawn trwy ba bynnag ddatryswr y mae'r VPN yn ei osod, a dylai'r ap ofyn am y ffurf gwbl gymwys pryd bynnag nad yw'r parth chwilio wedi'i warantu. Mae newid yr enw am gyfeiriad a diffodd gwiriadau tystysgrif yn symud y methiant yn hytrach na'i drwsio.
Cofnod DNS preifat a thystysgrif a gyhoeddwyd ar gyfer yr union enw hwnnw yw'r pâr a gefnogir. Popeth arall yw gwaith o gwmpas sy'n cyrraedd defnyddwyr.
Mater o lwybr yw goramser, nid mater o enw
NSURLErrorTimedOut yn golygu bod yr enw wedi datrys ac na atebodd dim, sy'n cyfeirio at y llwybr, y polisi pecynnau neu'r gwasanaeth. Pan gaiff y twnnel ei neilltuo fesul ap, nid yw ap arall sy'n cyrraedd yr un gweinydd yn dweud dim am eich fersiwn, oherwydd nad yw'r mapio hwnnw'n cael ei rannu. Gwiriwch fod y bwndel rydych yn ei redeg o fewn y neilltuad hwnnw, yna gwiriwch fod llwybr y gwasanaeth yn cael ei ganiatáu ar ei gyfer. Gall fersiwn datblygu a osodwyd y tu allan i'r neilltuad fod yn gyfan gwbl y tu allan i'r twnnel ac edrych fel API wedi torri.
Mae cymhariaeth porwr yn dangos bod gan ryw ap ar y ddyfais lwybr. Nid yw byth yn profi bod gan eich fersiwn chi un, a dyna pam mae'n rhaid rhedeg y ddau brawf ar wahân.
Mae methiannau ymddiriedaeth yn ymwneud â'r enw ar y dystysgrif
NSURLErrorServerCertificateUntrusted gyda'r gwall TLS oddi tano, yn golygu bod y gadwyn neu'r gwiriad hunaniaeth wedi methu. Rhaid ymddiried mewn CA mewnol ar y ddyfais, ac mae tystysgrif a gyhoeddwyd ar gyfer enw gwesteiwr gwahanol yn dal yn anghywir ar ôl unrhyw faint o ailffurfweddu rhwydwaith. canllaw App Transport Security yn parhau i fod yn berthnasol i'r cysylltiadau hyn sy'n llwytho URL, ac nid yw twnnel o amgylch gwasanaeth HTTP plaen yn gwneud y gwasanaeth hwnnw'n ddiogel o'r naill ben i'r llall.
Trwsiwch yr hunaniaeth neu'r angor ymddiriedaeth a chadwch y rhestr eithriadau'n wag. Mae eithriad blanced ar gyfer llwytho mympwyol yn cuddio'r methiant yn ystod datblygu ac yn ei adael yn ei le i bob defnyddiwr wedyn.
Mae gwrthodiad HTTP yn perthyn i'r ap, nid i'r rhwydwaith
Mae 401 neu 403 ar ôl handshake wedi'i gwblhau yn golygu bod y cais wedi cyrraedd ac i'r gwasanaeth ei wrthod, felly'r cwestiwn sy'n weddill yw cyfrif, cynulleidfa tocyn, cwmpas neu allwedd. Cofnodwch y cod statws a'r enw gwesteiwr, byth y tocyn cludydd na chorff yr ymateb. Ar y pwynt hwnnw mae'r twnnel yn gwneud ei waith ac mae newidiadau rhwydwaith pellach ond yn gohirio'r gwir atgyweiriad.
Y tabl yw'r dosbarthiad i'w gadw wrth ymyl y terfynell: un rhes ar gyfer pob methiant y gall yr ap ei adrodd mewn gwirionedd. Argraffwch y cod cyn ei ddarllen, oherwydd y rhes a ddewiswch sy'n penderfynu pa adran rydych yn ei gweithio trwyddi.
| 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 |
Mae pob rhes yn rhatach i'w phrofi na'r un oddi tani, ac mae pob un yn diystyru haen wahanol o'r un cais. Ewch i lawr y tabl nes bod rhes yn cyfateb, yna stopiwch newid y rhwydwaith.