遇到的問題
剛剛寫一個(gè)簡單的獲取天氣數(shù)據(jù)的demo,進(jìn)行Http請(qǐng)求的時(shí)候,程序報(bào)錯(cuò)提示:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
解決方法
在Info.plist中添加 App Transport Security Settings 類型 Dictionary ;
并在App Transport Security Settings 下添加 Allow Arbitrary Loads 類型Boolean, 值設(shè)為 YES-
或者在plist source code添加
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
二者效果等同
解釋原因徙赢、關(guān)于ATS
簡單翻閱了Apple官方App Transport Security文檔(簡稱ATS)得知:
ATS
ATS限制使用HTTP, 數(shù)據(jù)請(qǐng)求盡量通過HTTPS加密傳輸,
且HTTPS的請(qǐng)求也要滿足以下規(guī)定:
- 傳輸層協(xié)議(TLS)至少為1.2版本
- 連接的加密方式要提供Forward Secrecy,支持如下加密算法詳見蘋果官方文檔
- 證書至少要使用一個(gè)SHA256的指紋與任一個(gè)2048位或者更高位的RSA密鑰疚顷,或者是256位或者更高位的ECC密鑰躁染。如果不符合其中一項(xiàng)睛榄,請(qǐng)求將被中斷并返回nil.
上面新增的配置中的NSAppTransportSecurity是ATS配置的根節(jié)點(diǎn)跨蟹,配置了節(jié)點(diǎn)表示告訴系統(tǒng)要走自定義的ATS設(shè)置脐嫂。而NSAllowsAritraryLoads節(jié)點(diǎn)則是控制是否禁用ATS特性梗掰,設(shè)置YES就是禁用ATS功能爽雄。
總結(jié):
- 如果請(qǐng)求源是HTTP,則按以上方法處理
- 如果請(qǐng)求源是HTTPS,則需要根據(jù)是否滿足以上三個(gè)條件來針對(duì)性地配置plist