为什么必须添加`NSAppTransportSecurity`并将`NSAllowsArbitraryLoads`键添加到`YES`?
在早些时候,无论何时我想要检索数据,都不需要添加NSAppTransportSecurity
将NSAllowsArbitraryLoads
键设置为YES
,info.plist
,但现在如果要通过网络运行您的应用程序,则必须添加它。为什么必须添加`NSAppTransportSecurity`并将`NSAllowsArbitraryLoads`键添加到`YES`?
为什么需要?它如何有用?它的用法是什么?
任何人都可以帮忙吗?
应用运输安全与iOS9一起引入,作为将应用连接到网络时的附加安全功能。
从苹果公司的文档:
应用传输安全是一项功能,提高了应用程序和Web服务之间的连接 的安全性。该功能由 默认连接要求组成,符合 安全连接的最佳做法。应用可以覆盖此默认行为,并关闭传输安全性 。
其中一个要求是所有连接都必须使用HTTPS。这就是为什么所有只使用HTTP的连接都会在iOS9上失败。
如果您使用的服务不是通过HTTPS提供的,您仍然可以通过覆盖App Transport Security来使用它。这就是你的Info.plist
文件中的NSAppTransportSecurity
字典所用的。在那里您可以定义您希望覆盖哪个App Transport Security要求。
例如NSAllowsArbitraryLoads
禁用全部任何域的安全要求。您可以在NSExceptionDomains
词典中定义例外情况,但如果您不这样做,所有域都将被允许在没有App Transport Security的情况下连接到您的应用。
当你要连接到不使用HTTPS你不应该使用NSAllowsArbitraryLoads
因为禁用所有的安全所有域的单一域。相反,您应该专门覆盖这个域的HTTPS要求。
你可以这样做,像这样在你的Info.plist
文件:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourdomain.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
综上所述东西:应用程序传输安全性是一件好事,因为它鼓励你使用HTTPS连接,这比普通的HTTP更安全连接。因为你不能总是使用HTTPS,所以它给你提供了允许不安全连接的机会。仅在需要它们的地方使用这些安全覆盖是一个很好的做法。
谢谢... @joern – VRAwesome