所以,昨晚发布的iOS新测试版SDK有“应用传输安全”,鼓励开发者使用https而不是http。原则上,这是一个好主意,我已经在我们的登台/生产环境中使用了https。然而,当iOS应用程序连接到我笔记本电脑上运行的web服务时,我在本地开发环境中没有设置https。
从今天早上的一些测试来看,即使您提供http URL, URL加载系统也会决定使用https。有人知道如何禁用这种行为吗——即使只是针对特定的url ?
所以,昨晚发布的iOS新测试版SDK有“应用传输安全”,鼓励开发者使用https而不是http。原则上,这是一个好主意,我已经在我们的登台/生产环境中使用了https。然而,当iOS应用程序连接到我笔记本电脑上运行的web服务时,我在本地开发环境中没有设置https。
从今天早上的一些测试来看,即使您提供http URL, URL加载系统也会决定使用https。有人知道如何禁用这种行为吗——即使只是针对特定的url ?
当前回答
如果你只是想禁用本地开发服务器的应用程序传输策略,那么以下解决方案可以很好地工作。它是有用的,当你不能,或它是不切实际的,设置HTTPS(例如,当使用谷歌应用程序引擎开发服务器)。
正如其他人所说,ATP绝对不应该在生产应用中被关闭。
1)使用不同的plist进行调试
复制你的Plist文件和NSAllowsArbitraryLoads。使用这个Plist进行调试。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2)排除本地服务器
或者,您可以使用单个plist文件并排除特定的服务器。然而,它看起来不像你可以排除IP 4地址,所以你可能需要使用服务器名(在系统首选项->共享中找到,或在您的本地DNS中配置)。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>server.local</key>
<dict/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
其他回答
编译@adurdin和@User给出的答案
添加关注你的信息。Plist和更改localhost.com与您相应的域名,您可以添加多个域名以及:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>localhost.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
</plist>
你的信息。Plist必须是这样的:
如果你只是想禁用本地开发服务器的应用程序传输策略,那么以下解决方案可以很好地工作。它是有用的,当你不能,或它是不切实际的,设置HTTPS(例如,当使用谷歌应用程序引擎开发服务器)。
正如其他人所说,ATP绝对不应该在生产应用中被关闭。
1)使用不同的plist进行调试
复制你的Plist文件和NSAllowsArbitraryLoads。使用这个Plist进行调试。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2)排除本地服务器
或者,您可以使用单个plist文件并排除特定的服务器。然而,它看起来不像你可以排除IP 4地址,所以你可能需要使用服务器名(在系统首选项->共享中找到,或在您的本地DNS中配置)。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>server.local</key>
<dict/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
作为公认的答案已经提供了所需的信息,有关使用和禁用应用程序传输安全的更多信息,可以找到更多关于此的信息。
对于每域异常,将这些添加到Info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
但是如果我不知道我需要使用的所有不安全域名怎么办? 在Info.plist中使用以下键
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
欲了解更多细节,请点击此链接。
我已经解决为plist文件。
添加一个NSAppTransportSecurity: Dictionary。 添加名为“NSAllowsArbitraryLoads”的子键作为布尔值:YES
上面的配置不适合我。我尝试了很多组合键,这一个工作得很好:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mydomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>