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 |
ప్రతి వరుస దాని కింద ఉన్న దాని కంటే చవకగా పరీక్షించబడుతుంది, మరియు ప్రతి ఒక్కటి అదే అభ్యర్థన యొక్క వేరే పొరను మినహాయిస్తుంది. వరుస సరిపోలే వరకు పట్టికలో కిందకు వెళ్లండి, ఆ తర్వాత నెట్వర్క్ మార్చడం ఆపండి.