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 |
દરેક પંક્તિ તેની નીચેની કરતાં સસ્તી ચકાસાય છે, અને દરેક એ જ વિનંતીનું અલગ સ્તર બાકાત કરે છે. ટેબલ નીચે ઉતરો જ્યાં સુધી પંક્તિ મેળ ખાય, પછી નેટવર્ક બદલવાનું બંધ કરો.