API ошол эле телефондогу Safariде жооп берет, ал эми колдонмонун сурамы убакыт чегинен өтөт. Бул айырма адатта туннель эмес: ички кызматты чакырган колдонмо кадимки HTTPS сурамын жөнөтөт, ал эми түзмөктөгү бар VPN ошол сурамдын жолу бар-жогун гана чечет. Колдонмого экинчи туннель жазуу — продукт чечими, убакыт чеги үчүн оңдоо эмес. Төмөнкүлөр ийгиликсиздикти анын кайда болоруна карап классификациялайт, колдонмодо мурунтан бар ката бетин колдонуп.

Туннелден эмес, катадан баштаңыз

URLSession транспорттук каталарды NSError маанилери катары NSURLErrorDomain ичинде билдирет, ал эми код — жеткиликтүү эң арзан далил. Каалаган конфигурацияны өзгөртүүдөн мурун ошол кодду ийгиликсиз хост аты жана тапшырманын өткөн убактысы менен бирге журналга жазыңыз. Убакыт чеги, ат катасы жана ишеним катасы экранда бирдей көрүнөт жана үч түрдүү оңдоону талап кылат. Адегенде классификациялаңыз, анан ошол класстын бөлүмүн окуңуз.

Тапшырма көрсөткүчтөрү кийинки суроого жооп берет, байланыш такыр түзүлдүбү, бул жолу болбогон сурамды сервер өтө кеч жооп берген сурамдан ажыратат. Мунун эч бири туннелди өзгөртүүнү талап кылбайт; сурамдын өз диагностикасын окуй алган жерде басып чыгарууну талап кылат.

Атты чечүү башка нерселердин бардыгынан мурун ийгиликсиз болот

Мисалы, api.corp.example сыяктуу кыска кеңсе аты адатта телефондо жок издөө доменине көз каранды, ошондуктан колдонмо имараттын ичинде гана бар атты чечет. NSURLErrorCannotFindHost — бул кол тамга. Толук хост аты VPN орноткон каалаган чечүүчү аркылуу чечилиши керек, ал эми издөө домени кепилденбеген учурда колдонмо толук квалификацияланган форманы сурашы керек. Атты дарекке алмаштыруу жана сертификат текшерүүлөрүн өчүрүү ийгиликсиздикти оңдоонун ордуна жылдырат.

Жеке DNS жазуусу жана так ошол атка берилген сертификат — колдоого алынган жуп. Калганынын баары колдонуучуларга жеткен айланып өтүү жолу.

Убакыт чеги — ат эмес, жол маселеси

NSURLErrorTimedOut ат чечилгенин жана эч нерсе жооп бербегенин билдирет, бул маршрутка, пакет саясатына же кызматка көрсөтөт. Туннель ар бир колдонмого дайындалганда, ошол эле серверге жеткен башка колдонмо сиздин курулушуңуз жөнүндө эч нерсе айтпайт, анткени бул салыштыруу жалпы эмес. Иштетип жаткан топтомуңуз ошол дайындоонун ичинде экенин текшериңиз, анан кызмат жолу ага уруксат берилгенин текшериңиз. Дайындоонун сыртында орнотулган иштеп чыгуу курулушу туннелден толук сыртта калып, бузулган APIдай көрүнүшү мүмкүн.

Браузердеги салыштыруу түзмөктөгү кандайдыр бир колдонмонун жолу бар экенин көрсөтөт. Ал сиздин курулушуңузда бар экенин эч качан далилдебейт, ошондуктан эки тест өзүнчө жүргүзүлүшү керек.

Ишеним каталары сертификаттагы атка тиешелүү

NSURLErrorServerCertificateUntrusted анын астындагы TLS катасы менен бирге чынжырдын же инсандык текшерүүнүн ийгиликсиз болгонун билдирет. Ички CA түзмөктө ишенимдүү болушу керек, ал эми башка хост атына берилген сертификат кандайдыр бир тармактык кайра конфигурациялоодон кийин да туура эмес бойдон калат. Apple компаниясынын App Transport Security колдонмосу ушул URL жүктөөчү байланыштарга дагы эле колдонулат, ал эми жөнөкөй HTTP кызматынын айланасындагы туннель ошол кызматты учтан учка чейин коопсуз кылбайт.

Инсандыкты же ишеним тирегин оңдоп, эрекшеликтер тизмесин бош кармаңыз. Эркин жүктөө үчүн жалпы эрекшелик иштеп чыгуу учурунда ийгиликсиздикти жашырат жана кийин ар бир колдонуучу үчүн ордунда калтырат.

HTTP баш тартуу колдонмого таандык, тармакка эмес

Аякталган кол алышуудан кийинки 401 же 403 сурам жеткенин жана кызмат андан баш тартканын билдирет, ошондуктан калган суроо — эсеп, токен аудиториясы, камтуу же ачкыч. Абал коду жана хост атын жазыңыз, эч качан алып жүрүүчү токенди же жооп денесин жазбаңыз. Ошол учурда туннель өз ишин аткарып жатат, ал эми андан аркы тармактык өзгөртүүлөр чыныгы оңдоону гана кечиктирет.

Таблица — терминалдын жанында кармоочу классификация: колдонмо чындап билдире алган ар бир ийгиликсиздик үчүн бир сап. Кодду окуудан мурун басып чыгарыңыз, анткени тандаган сабыңыз кайсы бөлүмдү иштээриңизди чечет.

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

Ар бир сап анын астындагыдан арзаныраак текшерилет, жана ар бири ошол эле сурамдын башка катмарын жокко чыгарат. Таблица менен ылдый түшүңүз, сап дал келгенге чейин, анан тармакты өзгөртүүнү токтотуңуз.

Тектеш макалалар