API eyni telefonda Safari-də cavab verir, tətbiqin sorğusu isə vaxt aşımına uğrayır. Bu fərq adətən tunel deyil: daxili xidmətə müraciət edən tətbiq adi HTTPS sorğusu göndərir və cihazdakı mövcud VPN yalnız həmin sorğunun yolu olub-olmadığını müəyyən edir. Tətbiqə ikinci tunel yazmaq məhsul qərarıdır, vaxt aşımı üçün təmir deyil. Aşağıdakılar uğursuzluğu baş verdiyi yerə görə təsnif edir və tətbiqin artıq malik olduğu səhv səthindən istifadə edir.

Tuneldən deyil, səhvdən başlayın

URLSession nəqliyyat uğursuzluqlarını NSError dəyərləri kimi NSURLErrorDomain daxilində bildirir, və kod mövcud olan ən ucuz sübutdur. Hər hansı konfiqurasiyanı dəyişməzdən əvvəl həmin kodu uğursuz host adı və tapşırığın keçən vaxtı ilə birlikdə jurnalda qeyd edin. Vaxt aşımı, ad uğursuzluğu və etimad uğursuzluğu ekranda eyni görünür və üç fərqli təmir tələb edir. Əvvəlcə təsnif edin, sonra həmin sinif üçün bölməni oxuyun.

Tapşırıq metrikləri əlaqənin heç vaxt qurulub-qurulmadığına dair növbəti suala cavab verir və bu, heç vaxt yolu olmayan sorğunu serverin cavab verməsinə çox vaxt sərf etdiyi sorğudan ayırır. Bunların heç biri tunelin dəyişdirilməsini tələb etmir; sorğunun öz diaqnostikasının oxuya biləcəyiniz yerdə çap edilməsini tələb edir.

Ad həlli hər hansı başqa şeydən əvvəl uğursuz olur

Məsələn, api.corp.example kimi qısa ofis adı adətən telefonun daşımadığı axtarış domenindən asılıdır, ona görə də tətbiq yalnız binanın içində mövcud olan adı həll edir. NSURLErrorCannotFindHost həmin əlamətdir. Tam host adı VPN-in quraşdırdığı həlledici vasitəsilə həll edilməlidir və axtarış domeni zəmanətli olmadıqda tətbiq tam kvalifikasiyalı formanı istəməlidir. Adı ünvanla əvəz etmək və sertifikat yoxlamalarını söndürmək uğursuzluğu düzəltmək əvəzinə yerini dəyişir.

Şəxsi DNS qeydi və məhz həmin ad üçün verilmiş sertifikat dəstəklənən cütdür. Qalan hər şey istifadəçilərə göndərilən müvəqqəti həlldir.

Vaxt aşımı ad deyil, yol məsələsidir

NSURLErrorTimedOut adın həll olunduğunu və heç nəyin cavab vermədiyini bildirir, bu da marşruta, paket siyasətinə və ya xidmətə işarə edir. Tunel hər tətbiqə ayrıca təyin edildikdə, eyni serverə çatan başqa tətbiq sizin quruluşunuz haqqında heç nə demir, çünki bu xəritələmə paylaşılmır. İşlətdiyiniz paketin həmin təyinatın içində olduğunu yoxlayın, sonra xidmət yolunun ona icazəli olduğunu yoxlayın. Təyinatdan kənarda quraşdırılmış inkişaf quruluşu tamamilə tuneldən kənarda qala və pozulmuş API kimi görünə bilər.

Brauzer müqayisəsi cihazdakı hansısa tətbiqin yolu olduğunu göstərir. Bu, heç vaxt sizin quruluşunuzun yolu olduğunu sübut etmir, buna görə iki test ayrı-ayrılıqda aparılmalıdır.

Etimad uğursuzluqları sertifikatdakı adla bağlıdır

NSURLErrorServerCertificateUntrusted altındakı TLS xətası ilə birlikdə zəncirin və ya şəxsiyyət yoxlamasının uğursuz olduğunu bildirir. Daxili CA cihazda etibarlı olmalıdır və fərqli host adı üçün verilmiş sertifikat istənilən qədər şəbəkə yenidən konfiqurasiyasından sonra da səhv qalır. Apple-ın App Transport Security təlimatı bu URL yükləyən bağlantılara tətbiq olunmağa davam edir və adi HTTP xidməti ətrafındakı tunel həmin xidməti uçdan-uca təhlükəsiz etmir.

Şəxsiyyəti və ya etimad ankerini düzəldin və istisna siyahısını boş saxlayın. Hər şeyi yükləməyə icazə verən ümumi istisna uğursuzluğu inkişaf zamanı gizlədir və sonra hər istifadəçi üçün yerində qoyur.

HTTP rəddi şəbəkəyə deyil, tətbiqə aiddir

Tamamlanmış əl sıxışmasından sonra 401 və ya 403 sorğunun çatdığını və xidmətin onu rədd etdiyini bildirir, buna görə qalan sual hesab, token auditoriyası, əhatə dairəsi və ya açardır. Status kodunu və host adını qeyd edin, daşıyıcı tokeni və ya cavab gövdəsini heç vaxt qeyd etməyin. Bu nöqtədə tunel öz işini görür və əlavə şəbəkə dəyişiklikləri yalnız əsl düzəlişi gecikdirir.

Cədvəl terminalın yanında saxlanacaq təsnifatdır: tətbiqin həqiqətən bildirə biləcəyi hər uğursuzluq üçün bir sətir. Kodu oxumazdan əvvəl çap edin, çünki seçdiyiniz sətir hansı bölməni işləyəcəyinizi müəyyən edir.

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

Hər sətir altındakından daha ucuz sınaqdan keçir və hər biri eyni sorğunun fərqli qatını istisna edir. Cədvəldə uyğun sətir tapılana qədər aşağı enin, sonra şəbəkəni dəyişməyi dayandırın.

Əlaqəli məqalələr