VPN-ээр iPhone аппаас дотоод API-г хэрхэн дуудах вэ
Туннельд хүрэхээс өмнө бүтэлгүй хүсэлтийг NSURLError кодоор нь ангилж, дараа нь үнэхээр эвдэрсэн тэр давхаргыг засаарай.
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 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 |
Мөр бүр доорх мөрөөс хямд шалгагдах бөгөөд тус бүр нь ижил хүсэлтийн өөр давхаргыг хасана. Мөр таарах хүртэл хүснэгтээр доош явж, дараа нь сүлжээг өөрчлөхөө болиорой.