寫(xiě)在前面
之前做的項(xiàng)目,只要是報(bào)錯(cuò)就去搜,然后在info.plist里配置App Transport Security Settings的Allow Arbitrary Loads屬性(具體屬性的設(shè)置及其作用應(yīng)該沒(méi)啥難的,就不嗶嗶了)等。然后項(xiàng)目能運(yùn)行就不管了。
直到我在寫(xiě)這記錄的時(shí)候,依然沒(méi)有整明白。
問(wèn)題
示例URL:
url_domainName: http://local.group.site:305/path/subpath?query=para
url_ip: http://199.255.0:305/path/subpath?query=para
1. APP中的info.plist的ATS不禁用,也就是默認(rèn)開(kāi)啟安全連接。Allow Arbitrary Loads 默認(rèn)為false。(新建工程,不修改plist文件的App Transport Security Settings)
問(wèn)題表現(xiàn)為:
- 用url_domainName去請(qǐng)求
會(huì)報(bào)1022,就是
Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSUnderlyingError=0x102423790 {Error Domain=kCFErrorDomainCFNetwork Code=-1022}, NSErrorFailingURLStringKey=http://local.group.site:305/path/subpath?query=para, NSErrorFailingURLKey=<private>, NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.}
- 用url_ip去請(qǐng)求
就能正常拿到數(shù)據(jù)
2.APP中的info.plist的ATS禁用
那么不管是域名的還是ip形式的URL,都能正常工作。至此,皆大歡喜,也不考慮為啥。
可是我就納悶了,這不都是指向的同一個(gè)資源么,中間也就多了DNS解析操作啊,協(xié)議都是http啊,請(qǐng)求用的都是NSURLSession啊,在ATS開(kāi)啟的情況下為啥表現(xiàn)不同呢???????理論上不管是域名形式的還是ip形式的HTTP,都應(yīng)該報(bào)1022啊,為啥一個(gè)可以一個(gè)1022呢
其中,運(yùn)營(yíng)商那邊配置的local.group.site對(duì)應(yīng)的ip只有這一個(gè)ip199.255.0;上面兩個(gè)URL對(duì)于發(fā)起請(qǐng)求的客戶端來(lái)說(shuō),除了URL的形式不同之外,訪問(wèn)的資源應(yīng)該是同一個(gè)(請(qǐng)求參數(shù)及請(qǐng)求方式相同的情況下)。但是就是這么一個(gè)小小的,不起眼的請(qǐng)求,卻讓我迷惑了兩天。
思考
思考的過(guò)程一定伴隨著資料的查詢
- 我看了官方的文檔,查詢關(guān)鍵字
NSAppTransportSecurity

只是說(shuō)了HTTP是不安全的,大家都使用HTTPS吧。并沒(méi)有提及域名相關(guān)的字眼。
- 于是,我又去看DNS查詢的資料,網(wǎng)上無(wú)非都是四種查詢以及緩存查詢的流程。和我們這個(gè)問(wèn)題看起來(lái)沒(méi)有啥關(guān)系啊
分割線*2,哈哈哈
初步結(jié)論:
因?yàn)樽罱谧鯪etwork Extensions 相關(guān)的代理功能,你懂的。有域名污染的操作。
難道因?yàn)镈NS解析過(guò)程中會(huì)有被攔截的可能,但是ip卻不會(huì),所以域名形式URL進(jìn)行的HTTP訪問(wèn)就被蘋(píng)果的ATS認(rèn)為是不安全的,但是IP形式URL進(jìn)行的HTTP就是安全的?
目前我就想到這么多,很勉強(qiáng)的解釋吧。
因?yàn)榇a就是這么表現(xiàn)的,我就這么猜的。