Kā izsaukt iekšējo API no iPhone lietotnes caur VPN
Klasificējiet neveiksmīgo pieprasījumu pēc tā NSURLError koda, pirms pieskaraties tunelim, un pēc tam salabojiet tieši to slāni, kas patiešām sabruka.
API atbild Safari tajā pašā tālrunī, bet lietotnes pieprasījums beidzas ar taimautu. Šī atšķirība parasti nav tunelis: lietotne, kas izsauc iekšējo pakalpojumu, veic parastu HTTPS pieprasījumu, un ierīcē jau esošais VPN tikai izlemj, vai šim pieprasījumam ir ceļš. Otra tuneļa ierakstīšana lietotnē ir produkta lēmums, nevis taimauta labojums. Turpmākais klasificē kļūmi pēc tā, kur tā notiek, izmantojot kļūdu virsmu, kas lietotnei jau ir.
Sāciet ar kļūdu, nevis ar tuneli
URLSession transporta kļūmes ziņo kā NSError vērtības NSURLErrorDomain ietvaros, un kods ir lētākais pieejamais pierādījums. Pirms mainīt jebkuru konfigurāciju, reģistrējiet šo kodu kopā ar neveiksmīgo resursdatora nosaukumu un uzdevuma pagājušo laiku. Taimauts, nosaukuma kļūme un uzticības kļūme ekrānā izskatās vienādi un prasa trīs dažādus labojumus. Vispirms klasificējiet, pēc tam lasiet šīs klases sadaļu.
Uzdevuma metrikas atbild uz nākamo jautājumu, vai savienojums vispār tika izveidots, un tas atšķir pieprasījumu, kuram nekad nebija maršruta, no tā, uz kuru serveris atbildēja pārāk vēlu. Nekas no tā neprasa mainīt tuneli; tas prasa izdrukāt paša pieprasījuma diagnostiku vietā, kur to varat izlasīt.
Nosaukumu izšķiršana neizdodas pirms visa cita
Īss biroja nosaukums, piemēram, api.corp.example parasti ir atkarīgs no meklēšanas domēna, kura tālrunī nav, tāpēc lietotne atrisina nosaukumu, kas pastāv tikai ēkas iekšienē. NSURLErrorCannotFindHost ir paraksts. Pilns resursdatora nosaukums ir jāatrisina ar jebkuru risinātāju, ko instalē VPN, un lietotnei vajadzētu pieprasīt pilnībā kvalificēto formu, kad vien meklēšanas domēns nav garantēts. Nosaukuma aizstāšana ar adresi un sertifikātu pārbaužu izslēgšana pārvieto kļūmi, nevis to novērš.
Privāts DNS ieraksts un sertifikāts, kas izsniegts tieši šim nosaukumam, ir atbalstītais pāris. Viss pārējais ir apvedceļš, kas nonāk pie lietotājiem.
Taimauts ir ceļa jautājums, nevis nosaukuma jautājums
NSURLErrorTimedOut nozīmē, ka nosaukums tika atrisināts un nekas neatbildēja, kas norāda uz maršrutu, pakešu politiku vai pakalpojumu. Kad tunelis tiek piešķirts katrai lietotnei, cita lietotne, kas sasniedz to pašu serveri, neko nepasaka par jūsu būvējumu, jo šī kartēšana netiek koplietota. Pārbaudiet, vai palaistais komplekts ir šīs piešķires ietvaros, pēc tam pārbaudiet, vai pakalpojuma ceļš tam ir atļauts. Ārpus piešķires instalēts izstrādes būvējums var atrasties pilnīgi ārpus tuneļa un izskatīties kā salauzts API.
Pārlūkprogrammas salīdzinājums parāda, ka kādai ierīces lietotnei ir ceļš. Tas nekad nepierāda, ka jūsu būvējumam tas ir, tāpēc abi testi jāveic atsevišķi.
Uzticības kļūmes attiecas uz sertifikātā esošo nosaukumu
NSURLErrorServerCertificateUntrusted kopā ar TLS kļūdu zem tā nozīmē, ka ķēde vai identitātes pārbaude neizdevās. Iekšējam CA ir jābūt uzticamam ierīcē, un sertifikāts, kas izsniegts citam resursdatora nosaukumam, joprojām ir nepareizs pēc jebkādas tīkla pārkonfigurēšanas. Apple App Transport Security vadlīnijas joprojām attiecas uz šiem URL ielādējošajiem savienojumiem, un tunelis ap vienkāršu HTTP pakalpojumu nepadara šo pakalpojumu drošu no gala līdz galam.
Izlabojiet identitāti vai uzticības enkuru un turiet izņēmumu sarakstu tukšu. Vispārīgs izņēmums patvaļīgai ielādei slēpj kļūmi izstrādes laikā un atstāj to vietā katram lietotājam pēc tam.
HTTP noraidījums pieder lietotnei, nevis tīklam
401 vai 403 pēc pabeigtas rokasspiediena nozīmē, ka pieprasījums ieradās un pakalpojums to noraidīja, tāpēc atlikušais jautājums ir konts, pilnvaras auditorija, tvērums vai atslēga. Reģistrējiet statusa kodu un resursdatora nosaukumu, nekad nesēja pilnvaru vai atbildes pamattekstu. Tajā brīdī tunelis dara savu darbu, un turpmākas tīkla izmaiņas tikai aizkavē īsto labojumu.
Tabula ir klasifikācija, ko turēt blakus terminālim: viena rinda katram bojājumam, par kuru lietotne patiešām var ziņot. Izdrukājiet kodu, pirms to lasāt, jo izvēlētā rinda nosaka, kuru sadaļu jūs izstrādāsiet.
| 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 |
Katru rindu ir lētāk pārbaudīt nekā to, kas atrodas zem tās, un katra izslēdz citu tā paša pieprasījuma slāni. Ejiet tabulā uz leju, līdz rinda atbilst, pēc tam pārtrauciet mainīt tīklu.