iOS网络基础---iOS-Apple苹果官方文档翻译
iOS网络基础---iOS-Apple苹果官方文档翻译

iOS网络基础
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong

百度一下,你就知道





百度搜索


网络访问步骤示意图(1)


网络访问步骤示意图(2)


网络访问的四个步骤
• 第一步:确定地址--URL • 第二步:建立请求• 第三步:建立并启动连接
等待网络处理中......
• 第四步:连接完成,处理结果
备注:URL,统一资源定位符(URL,英语Uniform Resource Locator的缩 写)也被称为网页地址,是因特网上标准的资源的地址。iOS中资源地址 一般都是使用NSURL描述的,包括:网页、本地文件、音频、视频、电 话、短信等

iOS网络处理常用类
• NSURL(地址) - 请求地址
• NSURLRequest(请求,GET请求使用)- 保存需要传送给Web服务器的全部数据:
• 一个NSURL对象 • 缓存策略 • 等待Web服务器响应的最长时间 • 请求头(在iOS开发中,系统已经自动处理,程序员不需要考虑) • 请求体
• NSMutableURLRequest(可变请求,POST请求使用) -NSURLRequest的可修改子类
• NSURLConnection(连接)
- 负责创建客户端和Web服务器之间的网络连接、发送NSURLRequest对象 中的数据并收集来自服务器的响应
NSURLConnectionDataDelegate的常用代理方法
之所以使用代理方法,是因为要处理请求返回的结果
// 服务器开始返回数据 -(void)connection:didReceiveResponse:
// 收到服务器返回的数据,本方法会被调用多次 - (void)connection:didReceiveData:
// 数据接收完毕,做数据的最后处理 -(void)connectionDidFinishLoading:
// 网络连接错误 - (void)connection:didFailWithError:
// 发送数据给服务器,POST 请求使用此方法 - (void)connection:didSendBodyData:totalBytesWritten: totalBytesExpectedToWrite: 
网络访问基本演练 

GET & POST 网络请求的两种常用方式 
网络请求之 GET vs POST
• 有两种常用的方法把数据提交给服务器:GET和POST •GET
- GET的语义是获取指定URL上的资源
- 将数据按照variable=value的形式,添加到action所指向的URL后面,并且
两者使用“?”连接,各个变量之间使用“&”连接
- 不安全,因为在传输过程中,数据被放在请求的URL中
- 传输的数据量小,这主要是因为受URL长度限制
• POST
- POST的语意是对指定资源“追加/添加”数据
- 将数据放在数据体中,按照变量和值相对应的方式,传递到action所指向 URL
- 所有数据对用户来说不可见
- 可以传输大量数据,上传文件只能使用Post
• 提示:面试时,需要从地址栏安全,和实际安全讲清楚 



GET & POST请求演练--准备项目介绍 

NSURLConnectionDataDelegate数据代理方法回顾
• 开始接收• 接收数据• 完成接收• 出现错误• 如果是POST请求,发送数据,通常用于上传文件
关于代理方法
• 代理方法存在的问题- 代理方法较多,比较分散-要处理一个请求,需要在很多地方编写代码- 不利于逻辑实现、代码编写、调试、维护以及扩展 -尤其当存在多个请求时会变得非常麻烦
• 已经学习过的代理方法- UIApplicationDelegate
- UITableViewDelegate、UITableViewDataSource -UITextFieldDelegate
- 通过协议自定义代理方法-NSURLConnectionDataDelegate
同步请求和异步请求
• NSURLConnection提供了两个静态方法可以直接同步或异步调 用NSURLRequest,而无需通过NSURLConnectionDataDelegate 获取数据
Ø 同步请求:sendSynchronousRequest:requestreturningResponse:&response
error:&error Ø 异步请求:
sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse*response, NSData *data, NSError *error)
同步和异步请求演练 

缓存策略
• NSURLRequest的cachePolicy属性可以设置缓存策略,这是一种内存缓存,非硬盘缓存 • 使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,使程序高效的运行。
有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求 • cachePolicy支持的缓存策略包括:
- NSURLRequestUseProtocolCachePolicy 默认的缓存策略,要在协议的实现方法中指 定缓存逻辑
- NSURLRequestReloadIgnoringCacheData 忽略缓存从原始地址下载
- NSURLRequestReturnCacheDataElseLoad 没有缓存时从原始地址下载
- NSURLRequestReturnCacheDataDontLoad 只使用缓存,如果不存在缓存,请求失 败,适用于没有建立网络连接离线模式
- NSURLRequestReloadIgnoringLocalAndRemoteCacheData 忽略本地和远程的缓存数 据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似
- NSURLRequestReloadRevalidatingCacheData验证本地数据与远程数据是否相同, 如果不同则下载远程数据,否则使用本地数据
本地数据存储的原则
• 与安全相关的用户信息 - 用户密码
- 银行账号
• 原则:
- 任何应用程序都不能在本地直接存储与安全相关的用户信息
- 任何应用程序在于服务器传递数据时,都不能直接传输与安 全相关的用户信息 
数据安全--MD5
• Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为 计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保 护。该算法的文件号为RFC 1321
• MD5用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一 (又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现
• MD5的典型应用是对一段字节串产生指纹,以防止被“篡改”。例如, 可以对一个readme.txt生成一个MD5的值并记录在案,如果其他人修 改了文件中的任何内容,对该文件重新计算的MD5值会发生变化
• MD5还广泛用于操作系统的登录认证上,如Unix、各类BSD系统登录 密码、数字签名等诸多方面 
SHA-1简介
• SHA (Secure Hash Algorithm,译作安全散列算法) 由美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 列函数
• SHA-1, SHA-224, SHA-256, SHA-384 和 SHA-512都被需要安全散列算 法的美国联邦政府所应用,他们也使用其他的密码算法和协定来保护 敏感的未保密资料
• SHA-1散列函数用可能会被用来实现个人电脑上的数字版权的管理 
数据安全演练及单元测试初体验
• http://www.cmd5.com 
本节知识点回顾
• Get & Post请求
• 网络访问的四个步骤
- 地址、请求、连接、处理结果
• iOS网络处理常用类
- NSURL(地址) - NSRequest[GET] & NSMutableURLRequest[POST](请求) - NSConnection(连接)
• 实现NSURLConnectionDataDelegate代理方法可以接收服务器响应数据(处理 结果)
• 使用代理方法存在的问题
• 使用NSConnection的同步和异步静态方法可以直接调用请求
• 通过缓存策略可以提高网络访问效率,缓存策略是内存缓存 
iOS网络基础---iOS-Apple苹果官方文档翻译的更多相关文章
- iOS程序启动原理---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...
- iOS数据存取---iOS-Apple苹果官方文档翻译
CHENYILONG Blog iOS数据存取---iOS-Apple苹果官方文档翻译 数据存取/*技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http:// ...
- iOS静态库 ---iOS-Apple苹果官方文档翻译
iOS静态库 ---iOS-Apple苹果官方文档翻译 •什么是库? 库是共享程序代码的方式,一般分为静态库和动态库.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使⽤用就为什 ...
- iOS网络基础知识
iOS网络基础知识 1.一次HTTP请求的完整过程 (1)浏览器或应用发起Http请求,请求包含Http请求Http(请求),地址(url),协议(Http1.1)请求为头部 (2)web服务器接收到 ...
- CALayer---iOS-Apple苹果官方文档翻译之CALayer
CHENYILONG Blog CALayer---iOS-Apple苹果官方文档翻译之CALayer CALayer /*技术博客http://www.cnblogs.com/ChenYilong/ ...
- UIWebView---iOS-Apple苹果官方文档翻译
CHENYILONG Blog UIWebView---iOS-Apple苹果官方文档翻译 UIWebView 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博h ...
- NSURLSession---iOS-Apple苹果官方文档翻译
CHENYILONG Blog NSURLSession---iOS-Apple苹果官方文档翻译 NSURLSession 技术博客http://www.cnblogs.com/ChenYilong/ ...
- iOS基础 - iOS网络基础
一.网络访问的四个步骤 l 第一步:确定地址URL l 第二步:建立请求 l 第三步:建立并启动连接 l 第四步:连接完成,处理结果 备注:URL,统一资源定位符(URL,英语Uniform Reso ...
- 基本控件文档-UITableView---iOS-Apple苹果官方文档翻译
//转载请注明出处--本文永久链接:http://www.cnblogs.com/ChenYilong/p/3496969.html 技术博客http://www.cnblogs.com/ChenYi ...
随机推荐
- ElasticSearch API 简要介绍
调用其API会返回很多信息,例如集群的信息,节点的信息等 检查集群的状态----Restful API说明 1:检查集群状态信息 2:管理集群 3:执行 增删改查 命令 4:执行高级命令 Restfu ...
- Mac下Git的基础操作
目前最火的版本控制软件是Git了吧,今天简单梳理一下Mac下Git的基础操作~~ 一.什么是Git Git是一个分布式代码管理工具,用于敏捷的处理或大或小的项目,类似的工具还有svn. 基于Git的快 ...
- IE8 没有内容的盒子,如果有定位,浮现在其他盒子上 可能会有点击穿透没有作用的情况
IE8 没有内容的盒子,如果有定位,浮现在其他盒子上 可能会有点击穿透没有作用的情况
- bzoj3622-已经没有什么好害怕的的了
题意 给出两个长度为 \(n\) 的数列 \(a,b\) ,\(2n\) 个数都互不相同,求有多少种对应方式使得 \(a_i>b_i\) 的个数比 \(a_i<b_i\) 的个数恰好多 \ ...
- PHP 中数组获取不到元素
早上看到 SO 上一个有关 PHP 的问题,提问者描述有一个数组,使用 print_r 可以看到索引 key 和相对应的 value 都是存在的,但是访问该元素,不管是使用 array[key] 还是 ...
- CF17E Palisection manacher
题面:洛谷(带翻译) 题解: 直接求相交不太好求,所以考虑求不相交的回文串对数. 设ll[i]表示以i为开头的回文串个数,rr[i]表示结尾<=i的回文串个数. 然后不相交的回文串对数显然就是对 ...
- Netsh命令-修改网络IP设置
原文链接地址:https://blog.csdn.net/qq_38054198/article/details/77990914 静态设置IP 修改IP地址addr和子网掩码mask: \>n ...
- http_load - 集成测试工具之
http_load是基于linux平台的性能测试工具,它体积非常小,仅100KB.它以并行复用的方式运行,可以测试web服务器的吞吐量与负载. 1 官方地址 http://www.acme.com/ ...
- 【bzoj1502】月下柠檬树
Portal -->bzoj1502 Solution 额其实说实在这题我一开始卡在了..这个阴影长啥样上QwQ 首先因为是平行光线然后投影到了一个水平面上所以这个投影一定是..若干个圆再加上这 ...
- javascript里的sleep()方法
很多编程语言里都有sleep(),delay()等方法,它能让我们的程序不那么着急的去执行下一步操作,而是延迟.等待一段时间.软件开发中经常会遇到需要这样的函数,比如等待几分钟去检查某一事件是否发生. ...