首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应用程序传输安全性Xcode 7 beta 6

应用程序传输安全性Xcode 7 beta 6
EN

Stack Overflow用户
提问于 2015-09-06 19:15:31
回答 6查看 40.1K关注 0票数 36

我目前正在开发Xcode 7 beta 6。我试图向http://mySubdomain.herokuapp.com发送一个“删除”请求

我收到的错误是:

应用程序传输安全性阻止了明文HTTP (http://)资源负载,因为它是不安全的)。临时异常可以通过应用程序的Info.plist文件进行配置。 错误生成API调用: Error Domain=NSURLErrorDomain Code=-1022由于API策略要求使用安全连接,所以无法加载资源。 无法加载NSLocalizedDescription=The资源,因为应用程序传输安全策略要求使用安全连接。,NSUnderlyingError=0x796f7ef0 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}}

在我实际的API调用中,我使用了"https“而不是"http”,这实际上适用于我的POST请求。但是,DELETE请求会引发上述错误。

我在这里看到了涉及pList文件的解决方案,但没有一个适合我。下面列出了我的尝试。

第一次尝试:

代码语言:javascript
运行
复制
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

第二次尝试:

代码语言:javascript
运行
复制
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>herokuapp.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>

最后,我甚至把这些临时的钥匙放进了这样的地方:

代码语言:javascript
运行
复制
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>herokuapp.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSTemporaryThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSTemporaryThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSRequiresCertificateTransparency</key>
                <false/>
                <key>NSTemporaryRequiresCertificateTransparency</key>
                <false/>
            </dict>
        </dict>
    </dict>

都没有运气!我总是犯同样的错误。删除请求的格式是正确的,因为当我从Postman手动完成该请求时,就会得到所需的结果。

下面是我的实际API调用方法的样子,以防这里出现问题:

代码语言:javascript
运行
复制
class func makeDELETEALLRequest(completion: (error:Bool) -> Void) {
        let session = NSURLSession.sharedSession()
        let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean")
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = "DELETE"

        let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in

            if (error != nil) {
                print("Error making API call: \(error!)")
                completion(error: true)
            } else {
                let HTTPResponse = response as! NSHTTPURLResponse
                let statusCode = HTTPResponse.statusCode
                if (statusCode == 200){
                    print("Successfully deleted!")
                    completion(error: false)
                } else {
                    print("Different status code: \(statusCode)")
                    completion(error: true)
                }
            }
        }
        task.resume()
    }

再次,我正在使用Xcode 7 beta 6

关于我选择的答案我选择正确的答案对我来说是对的,因为我在我的项目中对错误的pList文件做了所有这些更改,而这个答案是唯一解决这个可能性的答案。其他答案所提供的解决方案并不是错误的,因此,任何其他经历这一问题的人都应该给他们一次尝试,因为他们是有效的。我希望这对任何有类似问题的人都有帮助。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-09-20 22:21:46

在升级到xCode 7.0之后,我也遇到了重写的问题,并且尝试了同样的解决方案,但都没有效果。在离开它一段时间之后,我注意到我在支持"MyAppName测试“文件下对MyAppName进行了更改,而不是在项目本身中。我的项目中的支持文件文件夹没有展开,所以我甚至没有注意到其中的Info.plist。

典型的业余错误,我敢肯定,但他们只隔了几行在项目导航,这让我感到沮丧,直到我发现了区别。我想我应该提一下以防你也有同样的问题。

票数 13
EN

Stack Overflow用户

发布于 2015-09-17 13:32:42

我在info.plist中添加了一些密钥来解决这个问题。因为我将目标C用于一些本机应用程序。

我遵循的步骤是:

  1. 打开我的项目info.plist文件
  2. 添加了一个名为NSAppTransportSecurity作为Dictionary的键。
  3. 添加了一个名为NSAllowsArbitraryLoads作为Boolean的Subkey,并将其值设置为YES,如下所示。

清理项目,现在一切都像以前一样顺利。

参考链接:

  1. https://stackoverflow.com/a/32631185/2905967
  2. https://stackoverflow.com/a/32609970
票数 49
EN

Stack Overflow用户

发布于 2015-09-16 13:27:24

感谢您尝试将以下内容添加到您的plist文件中:

代码语言:javascript
运行
复制
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

..。您可能需要尝试更改您的行:

代码语言:javascript
运行
复制
let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean")

至:

代码语言:javascript
运行
复制
let url = NSURL(string:"http://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean")

如果你试过了,很抱歉。当你认为你已经用尽了所有的途径时,我能理解这是多么令人沮丧。

但是,当我在Xcode 7上运行我的应用程序,以便测试我们的应用程序时,其中一个程序就开始出现了“应用程序传输安全性”问题。我们正在使用基于Oracle的web服务,现在开始为基于SSL的HTTP配置数字证书为时已晚。所以,上面添加到我的plist文件做了技巧。感谢你说你试过这个。但是,只是为了帮助其他人,它确实对我有效。它需要这样做,因为我没有立即在Oracle框上启用SSL的方法。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32427300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档