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

ഓരോ വരിയും അതിന് താഴെയുള്ളതിനേക്കാൾ വിലകുറഞ്ഞത് പരിശോധിക്കാം, ഓരോന്നും അതേ അഭ്യർത്ഥനയുടെ വ്യത്യസ്ത പാളി ഒഴിവാക്കുന്നു. ഒരു വരി പൊരുത്തപ്പെടുന്നതുവരെ പട്ടികയിൽ താഴേക്ക് പോകുക, തുടർന്ന് ശൃംഖല മാറ്റുന്നത് നിർത്തുക.

അനുബന്ധ ലേഖനങ്ങൾ