iOS -读书笔记-网络请求

知道“3次握手”吗?突然想起这个词

什么是3次握手?

TCP三次握手/四次挥手详解 这里是3次握手的详细解释

3次握手就是为了可靠的传送数据,TCP(什么是TCP呢?TCP就是一种可靠传输的协议)在发送数据之前,两台主机之间进行3次握手。3次握手完成后才发送数据。

预备知识: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

进入正题:

iOS 中首选的通信方式是HTTP。iOS提供的最方便的网络API也是针对HTTP的。

上文中说的“三次握手”就是为了建立一个TCP连接,HTTP请求和响应就是在TCP连接上来完成的,TCP连接可以重用,也就是说,并不是每次HTTP请求都需要建立TCP连接,只要TCP连接不断开,HTTP请求就可以一直使用。

HTTP和HTTPS的差别在什么地方?

安全。其实HTTPS协议就是SSL+HTTP协议。HTTPS和HTTP之间最重要的差别在于会话的建立阶段。TCP连接建立好之后,HTTP请求发送之前,客户端与服务器之间必须建立SSL(那么SSL又是什么呢?下面说)会话。会话建立完毕后,在TCP连接之上传输的所有数据都是加密的。

SSL是什么?

SSL (Secure Socket Layer),是一种保证服务器和客户端安全通信的协议。使用HTTPS协议,所有的HTTP数据都是在SSL协议封装之上传输的。突然冒出另外一个词TLS,其实TLS是SSL标准化的产物,事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼平常还是以SSL为多。关于SSL的介绍看下这篇文章讲的很好SSL/TLS协议运行机制的概述

iOS 最高层的HTTP API

NSURL 、NSURLRequest 、NSURLConnection 、NSURLResponse 对象

1 NSURL

通过NSURL 对象轻松方便的访问URL所指向的内容,NSURL 可以指向文件资源,也可以指向网络资源。

NSURL *url = [NSURL URLWithString:@”“];

NSData *data = [NSData dataWithContentsOfURL:url];

即可以获取网络资源又可以获文件资源。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    NSInputStream *inStream = [NSInputStream inputStreamWithFileAtPath:@"文件路径"];
    [request setHTTPBodyStream:inStream];

NSURL还提供了很多方法来读取URL各个部分的值,比如url.port获取一下url的端口。

在创建NSURL对象前需要对URL字符串进行百分号编码。RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。相关更详细的看百分号编码

2 NSURLRequest

创建好NSURL对象后接下来就需要执行下一步:创建NSURLRequest对象。NSURLRequest 对象包含了加载URL内容所需的信息。iOS中的URL加载系统支持HTTP 、HTTPS、FTP和FILE URL内容的加载

URL加载系统提供了一种扩展方式一处理新的协议,方式就是创建NSURLProtocol的子类,然后将返回的结果提供给URL加载系统。

NSURL *url = [NSURL URLWithString:@"www.baidu.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

采用默认的参数来创建对象。如果是HTTP或者HTTPS 那么请求方法是GET,并且使用操作系统提供的默认头。

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];

设置缓存策略和请求时间,NSURLRequest也提供了许多方法来获取请求的属性。但是不能设置,如果想要设置,那么来用NSMutableRequest。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[@"body" dataUsingEncoding:NSUTF8StringEncoding]];
    [request setAllHTTPHeaderFields:@{@"":@""}];

NSMutableRequest 设置各种参数。

发送大容量内容可以使用NSInputSteam,使用该对象提供请求体而无需将整个内容加载到内存中。发送图片或者视频这是最佳的选择。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    NSInputStream *inStream = [NSInputStream inputStreamWithFileAtPath:@"文件路径"];
    [request setHTTPBodyStream:inStream];

3 NSURLConnection

NSURLConnection 对象是URL加载统统活动的中心。用于连接服务器获取响应。提供了同步、异步、队列异步的操作模式。同步最简单,但是会有堵塞线程等缺点。异步模式下调用委托代理来处理数据。

4 NSURLReponse

NSURLResponse 对象会在URL加载请求完毕后返回。NSError对象与DSData对象,如果请求出现问题或服务器问题会返回NSError对象,如果有响应返回NSData对象就会包含响应体.

NSURLReponse提供了很多属性信息。

MIMEType 结果数据的MIME类型。该值来源于服务器。

expectedContentLenth 返回内容的大小,可能与实际不符。

suggestedFilename 提供的文件名,要么来自服务器提供的内容的文件名,要么来自URL和MIME类型。

URL 返回内容的URL。由于成定向的原因,URL可能与请求提供的URL不同。

textEncodingName 最初数据源所用的文本编码名。

HSHTTPURLResponse 是NSURLResponse的子类,它包含特定于HTTP请求的属性。

响应头 - allHeaderFields

HTTP状态码 - statusCode

文章来自《iOS高级编程》 扫盲

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-18 17:48:25

iOS -读书笔记-网络请求的相关文章

iOS学习笔记---网络请求

一.HTTP协议的概念 HTTP协议:Hyper Text Transfer Protocol(超文本传输协议)是用于从万维网服务器传送超文本到本地浏览器的传输协议.HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型(c/s) HTTP协议的特点 支持客户/服务器模式(c/s模式) 简单快速 灵活,HTTP允许任意类型的对象进行传输,正在传输的对象类型由Content-type加以标记 iOS学习笔记---网络请求

iOS 读书笔记-网络API

文章来自<ios网络高级编程> 在这里只是摘录,其中还有好多东西不知道是什么,等做完整本书的笔记回过头来看下. 框架的每一层都提供了一套关键api,为开发者提供了各种功能与控制. 1 nsurlconnection 是cocoa级别的api,它提供了简单的方法来加载url请求,可以与web service直接进行交互.获取图片.视频还能简单的得到一个格式化的html文档.它构建在NSStream之上,并且在http.https.文件和ftp进行了优化.NSURLConnection限制了你所使

IOS学习笔记 -- 网络编程

一.HTTP协议1.面试题: 聊一下HTTP协议(表达对HTTP协议的看法)* HTTP协议的全称: 超文本传输协议, 定制传输数据的规范(客户端和服务器之间的数据传输规范)* 描述HTTP协议完整的通信过程 2.通信过程1> 请求* 客户端 --> 服务器* 请求的内容a."请求行" : 请求方法\请求资源路径\HTTP协议版本GET /MJServer/login?username=123&pwd=123&method=get&type=JSON

iOS 读书笔记 第一章

1.确定某个实例或类方法是否可用. 1)使用NSObject的类方法instancesRespondToSelector:来确定是否在该类的一个实例中存在一个特定的选择器. NSArray *array = @[@"1",@"2"]; if ([NSArray instancesRespondToSelector:@selector(sortUsingComparator:)]) { //do something use sortUsingComparator: }

ios中封装网络请求类

ios中封装网络请求类 #import "JSNetWork.h" //asiHttpRequest #import "ASIFormDataRequest.h" //xml 的解析 #import "UseXmlParser.h" //判断是否联网 #import "Reachability.h" //sbJson,判断json的解析 #import "JSON.h" @implementation JS

iOS开发笔记 - 网络篇

计算机网络基础 ??计算机网络是多台独立自主的计算机互联而成的系统的总称,最初建立计算机网络的目的是实现信息传递和资源共享. ??如果说计算机是第二次世界大战的产物,那么计算机网络则是美苏冷战的产物.20世纪60年代初期,美国国防部领导的ARPA提出研究一种崭新的.能够适应现代战争的.生存性很强的通信系统并藉此来应对苏联核攻击的威胁,这个决定促使了分组交换网的诞生,也奠定今天计算机网络的原型,这是计算机网络发展史上第一个里程碑式的事件. ??第二个里程碑式的事件是20世纪80年代初,国际标准化组

iOS核心笔记——网络编程-HTTPS协议

1.HTTPS的基本使用: 1.HTTPS简单说明: ?了解:HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. ?重要:即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. 它是一个URI scheme(抽象标识符体系),句法类同http:体系.用于安全的HTTP数据传输. ?重要:https:URL:表明它使用了HTTPS,

iOS开发之网络请求(一)ASIHTTPRequest

全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 基于底层的CFNetwork框架,运行效率很高 可惜作者早已停止更新,有一些潜在的BUG无人去解决 很多公司的旧项目里面都残留着它的身影,以前的很多iOS项目都是ASI + SBJson 会不会用ASI,可以算是检验是否为老牌iOS程序员的标准之一 ASI的github地址 https://github.com/pokeb/asi-http-request ASI的使用参考 http://www.cnblogs.com/d

iOS开发 - AFNetworking网络请求

AFNetworking 什么是AFN 全称是AFNetworking,是对NSURLConnection.NSURLSession的一层封装 虽然运行效率没有ASI高,但是使用比ASI简单 在iOS开发中,使用比较广泛 AFN的github地址 https://github.com/AFNetworking/AFNetworking AFHTTPRequestOperationManager 是AFN中最重要的对象之一 封装了HTTP请求的常见处理 GET\POST请求 解析服务器的响应数据