Xcode7.0上面使用http进行请求错误
2015-09-29 09:37
267 查看
最近在Xcode 7中向服务器发送请求访问JSON数据时, 控制台打印了以下错误信息:
看原因应该是获取到的NSData数据为空, 所以在调用+ JSONObjectWithData: 方法时出现错误. 检验http链接可以正常访问. 后来发现在iOS9应用通讯安全策略进行了升级, 已不再支持http这种不安全的协议(What's
New in iOS 9.0):
App Transport Security
App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You
should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one.
If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through
higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn't follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this
domain in your app's Info.plist file.
至于为什么http不安全, http是超文本传输协议, 信息采用明文传输, 而https则使用SSL加密传输协议进行传输. 既然服务器的链接并不是我们前端所能决定的, 如果一定要发送http协议的请求, 可以修改当前项目的Info.plist文件来实现:
方式一: 使用文本编辑
方式二: 在Info.plist中添加:
以上两种方式所实现的效果是一致的, 但是并不严谨, 建议有选择的允许HTTP请求(这个操作方法与上文"方式一"相同):
当然, 以上方法都是建立在所访问的请求是HTTP类型的基础上, 一劳永逸的方法就是让服务端升级使用
服务器已支持TLS 1.2 SSL ,但iOS9上还是不行,还要进行链接里的适配操作。”那是因为:ATS只信任知名CA颁发的证书,小公司所使用的 self signed certificate,还是会被ATS拦截。对此,建议使用链接中给出的NSExceptionDomains,并将你们公司的域名挂在下面。
转载至http://www.jianshu.com/p/257a28846956
Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data paramete
看原因应该是获取到的NSData数据为空, 所以在调用+ JSONObjectWithData: 方法时出现错误. 检验http链接可以正常访问. 后来发现在iOS9应用通讯安全策略进行了升级, 已不再支持http这种不安全的协议(What's
New in iOS 9.0):
App Transport Security
App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You
should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one.
If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through
higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn't follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this
domain in your app's Info.plist file.
至于为什么http不安全, http是超文本传输协议, 信息采用明文传输, 而https则使用SSL加密传输协议进行传输. 既然服务器的链接并不是我们前端所能决定的, 如果一定要发送http协议的请求, 可以修改当前项目的Info.plist文件来实现:
方式一: 使用文本编辑
Info.plist, 在当中添加:
<!--回到过去不安全的HTTP网络请求,能任意进行HTTP请求 (不建议这样做, 原因见下文)--> <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
方式二: 在Info.plist中添加:
以上两种方式所实现的效果是一致的, 但是并不严谨, 建议有选择的允许HTTP请求(这个操作方法与上文"方式一"相同):
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>域名.com</key> <dict> <!--允许子域名:subdomains--> <key>NSIncludesSubdomains</key> <true/> <!--允许App进行不安全的HTTP请求--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!--在这里声明所支持的 TLS 最低版本--> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>
当然, 以上方法都是建立在所访问的请求是HTTP类型的基础上, 一劳永逸的方法就是让服务端升级使用
TLS 1.2 SSL加密请求的
HTTPS协议.
服务器已支持TLS 1.2 SSL ,但iOS9上还是不行,还要进行链接里的适配操作。”那是因为:ATS只信任知名CA颁发的证书,小公司所使用的 self signed certificate,还是会被ATS拦截。对此,建议使用链接中给出的NSExceptionDomains,并将你们公司的域名挂在下面。
转载至http://www.jianshu.com/p/257a28846956
相关文章推荐
- python获得http头信息
- iOS基础-网络-监测网络状态
- HTTP报文-->MVC
- 浅谈C#网络编程(一)
- Android网络编程之TCP/IP,HTTP,HTTPS协议了解
- Lighttpd(linux lighttpd)中CGI执行流程
- TCP/IP 协议详解内容总结
- VIEWGOOD(远古)网络电视台实现特点与优势
- linux下配置tomcat的https实例
- HTTP协议状态码详解(HTTP Status Code)
- hdu 5486 Difference of Clustering 2015合肥网络赛 并查集 离散化 悲伤的题
- TCP/IP详解卷1 读书笔记:第二章 链路层
- 理解LSTM网络
- hdu 5489 Removed Interval 2015合肥网络赛 树状数组 dp 离散化/dp
- linux网络配置命令总结
- HTTP协议
- HDU 5493 Queue (2015年合肥赛区网络赛J题)
- 计算机网络读书笔记(谢希仁 第六版 思维导图)
- 基于网络的 Red Hat 无人值守安装
- hdu5476 Explore Track of Point 2015上海网络赛