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 |
ಪ್ರತಿ ಸಾಲು ಅದರ ಕೆಳಗಿನ ಸಾಲಿಗಿಂತ ಅಗ್ಗವಾಗಿ ಪರೀಕ್ಷಿಸಲ್ಪಡುತ್ತದೆ, ಮತ್ತು ಪ್ರತಿಯೊಂದೂ ಅದೇ ವಿನಂತಿಯ ಬೇರೆ ಪದರವನ್ನು ಹೊರಗಿಡುತ್ತದೆ. ಸಾಲು ಹೊಂದಿಕೆಯಾಗುವವರೆಗೆ ಕೋಷ್ಟಕದಲ್ಲಿ ಕೆಳಗೆ ಹೋಗಿ, ನಂತರ ಜಾಲಬಂಧ ಬದಲಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿ.