为什么必须添加`NSAppTransportSecurity`并将`NSAllowsArbitraryLoads`键添加到`YES`?

VRA*_*ome 1 info.plist uiwebview nsurlconnection nsapptransportsecurity

在早期的日子里,每当我想那里获取数据并不需要添加NSAppTransportSecurity设置NSAllowsArbitraryLoads关键YESinfo.plist,但如果你现在要运行你的应用程序通过网络,那么它必须加入.

为什么需要它?它有用吗?它的用途是什么?

有人可以帮忙吗?

joe*_*ern 7

在将您的应用程序连接到Web时,iOS9引入了App Transport Security作为附加安全功能.

来自Apple的文档:

App Transport Security是一项可以提高应用和Web服务之间连接安全性的功能.该功能包含符合安全连接最佳实践的默认连接要求.应用可以覆盖此默认行为并关闭传输安全性.

其中一个要求是所有连接都必须使用HTTPS.这就是为什么只使用HTTP的所有连接都将在iOS9上失败.

如果您使用的服务不是通过HTTPS提供的,您仍然可以通过覆盖App Transport Security来使用它.这就是NSAppTransportSecurityInfo.plist文件中的字典的用途.在那里,您可以定义要覆盖的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>
Run Code Online (Sandbox Code Playgroud)

总结一下:App Transport Security是一件好事,因为它鼓励您使用比普通HTTP连接更安全的HTTPS连接.因为您不能总是使用HTTPS,所以它为您提供了允许不安全连接的机会.最好只在您需要的地方使用这些安全覆盖.