【问题标题】:POST request error: NSURLConnection HTTP load failed iOS 10POST 请求错误:NSURLConnection HTTP 加载失败 iOS 10
【发布时间】:2017-05-13 23:13:28
【问题描述】:

我是 iOS 编程新手。我想将我的应用连接到my web service (HTTPS)

当我在 iOS 10 中使用“Alamofire 4.0”运行 POST 请求时,为什么 XCode 会告诉我这个错误?

当我使用 iOS 9 模拟器时,不会出现此错误。正如人们在stackoverflow上所说的那样,我尝试了各种方法,但都没有解决我的问题。

更新:

我已经在 info.plist 中添加了这个,但仍然出现同样的错误。

如何在 iOS 10 中实现 ATS?

提前致谢。

【问题讨论】:

  • 什么域?如果我们可以看到您的服务器实际提供的内容,那么提供建议会容易得多。 :-)
  • @dgatwood,这是域:link
  • 尝试在 Mac 的终端中运行 nscurl --ats-diagnostics https://api.wideboard.me/。查找报告的错误。
  • @wottle,我做到了。使用该命令行执行的所有测试的结果都是“通过”。请帮我解决这个问题。
  • 您是否更新了 AlamoFire 中的 plist,或者只是在您的项目中?您需要在两者中禁用 ATS。确认后,按照此处所述更新日志记录:useyourloaf.com/blog/app-transport-security 以查看导致问题的确切 SSL 错误(如果您在 AlamoFire 模块中禁用 ATS 后仍然看到一个错误。

标签: swift3 ios10 nsurlsession app-transport-security xcode8.2


【解决方案1】:

应用传输安全 (ATS) 在应用与其后端之间的安全连接中强制执行最佳实践。 ATS 可防止意外泄露,提供安全的默认行为,并且易于采用;它在 iOS 9 和 OS X v10.11 中也默认开启。无论您是创建新应用还是更新现有应用,都应尽快采用 ATS。

如果您正在开发新应用,则应仅使用 HTTPS。如果您有一个现有的应用程序,您现在应该尽可能多地使用 HTTPS,并制定一个计划以尽快迁移您的应用程序的其余部分。此外,您通过更高级别 API 进行的通信需要使用具有前向保密性的 TLS 版本 1.2 进行加密。如果您尝试建立不符合此要求的连接,则会引发错误。如果您的应用需要向不安全的域发出请求,您必须在应用的 Info.plist 文件中指定该域。

更多详情请参考Apple Document.

您需要在 Info.plist 中进行更改

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

像这样打开 Info.plist 文件

在里面添加 TransportSecurity

​​>

【讨论】:

  • 实际上,为了澄清,前向保密是您可以在 ATS 中禁用的设置之一,在提交到应用商店时不需要额外的理由(当 Apple 开始强制执行该要求时)。跨度>
【解决方案2】:

就我而言,我将我的 API 域上的 SSL 证书更改为 Apple 在 this link 中提到的受信任证书。

【讨论】:

  • 我也面临同样的错误,请您解释一下如何解决这个问题。 @user1994
  • 这是准确的答案。更改应用程序传输安全性无济于事(我猜它已在 Xcode 10 及更高版本中修复)而且很危险。
【解决方案3】:

检查您的移动网络,主要是这个原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2016-10-19
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多