在早期,每当我想检索数据时,都不需要添加NSAppTransportSecurity
set NSAllowsArbitraryLoads
key to YES
in info.plist
,但现在如果您要通过网络运行您的应用程序,则必须添加它。
为什么需要它?它如何有用?它的用途是什么?
有人可以帮忙吗?
在早期,每当我想检索数据时,都不需要添加NSAppTransportSecurity
set NSAllowsArbitraryLoads
key to YES
in info.plist
,但现在如果您要通过网络运行您的应用程序,则必须添加它。
为什么需要它?它如何有用?它的用途是什么?
有人可以帮忙吗?
App Transport Security是在 iOS9 中引入的,作为将您的应用程序连接到 Web 时的一项附加安全功能。
来自 Apple 的文档:
应用程序传输安全性是一项提高应用程序和 Web 服务之间连接安全性的功能。该功能包含符合安全连接最佳实践的默认连接要求。应用程序可以覆盖此默认行为并关闭传输安全性。
其中一项要求是所有连接都必须使用HTTPS。这就是为什么所有仅使用 HTTP 的连接在 iOS9 上都会失败的原因。
如果您使用的是无法通过 HTTPS 获得的服务,您仍然可以通过覆盖 App Transport Security 来使用它。这就是NSAppTransportSecurity
您文件中的字典的Info.plist
用途。您可以在此处定义要覆盖的应用程序传输安全要求。
例如NSAllowsArbitraryLoads
禁用任何域的所有安全要求。您可以在字典中定义例外NSExceptionDomains
,但如果您不这样做,所有域都将被允许在没有应用传输安全性的情况下连接到您的应用。
当您想要连接到不使用 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>
总结一下:App Transport Security 是一件好事,因为它鼓励您使用比普通 HTTP 连接更安全的 HTTPS 连接。因为您不能总是使用 HTTPS,所以它为您提供了允许不安全连接的机会。仅在您需要它们的地方使用这些安全覆盖是一种很好的做法。