Az API válaszol a Safariban ugyanazon a telefonon, míg az alkalmazás kérése időtúllépésbe fut. Ez a rés általában nem az alagút: egy belső szolgáltatást hívó alkalmazás közönséges HTTPS-kérést küld, és a készüléken már meglévő VPN csak arról dönt, hogy a kérésnek van-e útvonala. Egy második alagút beírása az alkalmazásba terméki döntés, nem az időtúllépés javítása. A következők a hibát aszerint osztályozzák, hol történik, azt a hiba felületet használva, amely az alkalmazásnak már megvan.

A hibától induljon, ne az alagúttól

URLSession szállítási hibákként jelenti a NSError értékeket a NSURLErrorDomain területén, és a kód a legolcsóbb elérhető bizonyíték. Mielőtt bármilyen konfigurációt módosítana, naplózza ezt a kódot a sikertelen hosztnévvel és a feladat eltelt idejével. Az időtúllépés, a névhiba és a bizalmi hiba ugyanúgy néz ki a képernyőn, és három különböző javítást igényel. Először osztályozzon, aztán olvassa el az adott osztály szakaszát.

A feladatmetrikák a következő kérdésre válaszolnak, létrejött-e egyáltalán kapcsolat, ami elválasztja az útvonal nélküli kérést attól, amelyre a szerver túl lassan válaszolt. Ebből semmi sem igényli az alagút módosítását; azt igényli, hogy magának a kérésnek a diagnosztikája olyan helyen jelenjen meg, ahol el tudja olvasni.

A névfeloldás minden más előtt meghiúsul

Egy rövid irodai név, például a api.corp.example általában egy olyan keresési tartománytól függ, amelyet a telefon nem hordoz, ezért az alkalmazás egy olyan nevet old fel, amely csak az épületen belül létezik. NSURLErrorCannotFindHost a névjegy. A teljes hosztnevet bármelyik feloldón keresztül fel kell oldani, amelyet a VPN telepít, és az alkalmazásnak a teljesen minősített formát kell kérnie, amikor a keresési tartomány nem garantált. A név címre cserélése és a tanúsítvány-ellenőrzések kikapcsolása elmozdítja a hibát, ahelyett hogy kijavítaná.

Egy privát DNS-rekord és a pontosan erre a névre kiállított tanúsítvány a támogatott pár. Minden más kerülőút, amely eljut a felhasználókhoz.

Az időtúllépés útvonal kérdése, nem név kérdése

NSURLErrorTimedOut azt jelenti, hogy a név feloldódott és semmi sem válaszolt, ami az útvonalra, a csomagpolitikára vagy a szolgáltatásra mutat. Amikor az alagutat alkalmazásonként osztják ki, egy másik alkalmazás, amely ugyanazt a szervert éri el, semmit sem mond a saját buildjéről, mert ez a leképezés nem közös. Ellenőrizze, hogy a futtatott csomag ezen a kiosztáson belül van-e, majd ellenőrizze, hogy a szolgáltatás útvonala engedélyezett-e számára. A kiosztáson kívül telepített fejlesztői build teljesen az alagúton kívül lehet, és törött API-nak tűnhet.

Egy böngésző-összehasonlítás megmutatja, hogy a készülék valamelyik alkalmazásának van útvonala. Ez soha nem bizonyítja, hogy a saját buildjének is van, ezért a két tesztet külön kell lefuttatni.

A bizalmi hibák a tanúsítványon szereplő névről szólnak

NSURLErrorServerCertificateUntrusted az alatta lévő TLS-hibával együtt azt jelenti, hogy a lánc vagy az identitásellenőrzés meghiúsult. Egy belső CA-nak megbízhatónak kell lennie a készüléken, és egy másik hosztnévre kiállított tanúsítvány bármennyi hálózati újrakonfigurálás után is hibás marad. Az Apple App Transport Security útmutatója továbbra is vonatkozik ezekre az URL-t betöltő kapcsolatokra, és egy egyszerű HTTP-szolgáltatás körüli alagút nem teszi azt a szolgáltatást végponttól végpontig biztonságossá.

Javítsa az identitást vagy a bizalmi horgonyt, és tartsa üresen a kivétellistát. Az önkényes betöltésre adott általános kivétel elrejti a hibát a fejlesztés során, és a későbbiekben minden felhasználónál a helyén hagyja.

Az HTTP-elutasítás az alkalmazáshoz tartozik, nem a hálózathoz

Egy 401 vagy 403 egy befejezett kézfogás után azt jelenti, hogy a kérés megérkezett, és a szolgáltatás elutasította, így a fennmaradó kérdés egy fiók, egy token-közönség, egy hatókör vagy egy kulcs. Naplózza a státuszkódot és a hosztnevet, soha ne a hordozó tokent vagy a válasz törzsét. Ezen a ponton az alagút végzi a dolgát, és a további hálózati változtatások csak késleltetik az igazi javítást.

A táblázat az osztályozás, amelyet a terminál mellett érdemes tartani: egy sor minden hibához, amelyről az alkalmazás valóban beszámolhat. Nyomtassa ki a kódot, mielőtt elolvassa, mert a választott sor dönti el, melyik szakaszt dolgozza át.

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

Minden sor olcsóbban tesztelhető, mint az alatta lévő, és mindegyik ugyanazon kérés másik rétegét zárja ki. Haladjon lefelé a táblázatban, amíg egy sor illeszkedik, majd hagyja abba a hálózat módosítását.

Kapcsolódó cikkek