网络请求和性能优化

URL:

"URL":统一资源定位符。协议头/主机地址/路径。

请求协议:

1,file://访问的是本地计算机上的资源。

2,ftp://访问的是共享主机的文件资源。

3,mailto://访问的是电子邮件地址。

4,http://超文本传输协议,访问的是远程的网络资源。

TCP/IP协议。

IP按照层次划分,IP网际协议位于网络层,IP协议的作用就是把各种数据包传送给对象。

TCP按照层次划分,TCP协议位于传输层,提供了可靠的字节流服务,字节流服务指为了翻遍传输大块的数据分割成以报文段为单位的数据包进行管理。而且TCP协议能够确认数据最终是否已经送达到对方。

为了准确无误的将数据送达到目的地,TCP采用了三次握手的策略:握手工程中使用TCP的标志、SYN和ACK。

三次握手过程:发送端首先发送一个带SYN标志的数据包给对方。接收端接收到后,回传一个带有SYN/ACK标志的数据包,以表示传达确认信息,最终发送端再回传一个带ACK标志的数据包,标识握手结束。

DNS服务和HTTP协议一样位于应用层,他提供域名到IP地址间的解析服务。


性能优化:

出发点:1,努力消除或减少不必要的网络延迟。2,将需要传输的数据压缩至最少。

性能优化的最佳实践:

1,减少DNS查找:每次主机名的解析都需要一次网络往返,从而增加了请求的延迟时间,同时还会阻塞后续的请求。

2,重用TCP连接:尽可能的使用持久连接,以消除因TCP握手和慢启动导致的延迟。

3,减少HTTP重定向。HTTP冲定向需要额外的DNS查询、TCP握手等非常耗时,最佳的重定向次数为0.

4,使用CDN(内容分发网络):把数据放在离用户地理位置更近的地方,可以明显减少每次TCP连接的网络延迟,增大吞吐量。

5,删除没有必要请求的资源。

6,在客户端缓存资源:缓存必要的应用资源,避免每次都重复请求相同的内容,例如多图片下载可以考虑使用缓存。

7,内容在传输前先压缩:传输数据之前应该先压缩应用资源,把要传输的字节减少到最小,在压缩的时候确保对每种不同的资源采用最好的压缩手段。

8,消除不必要的请求开销:减少请求的HTTP首部数据(比如HTTP cookie).

9,并行处理请求和响应:请求和响应的派对都会导致延迟,可以尝试并行的处理请求和响应(利用多个HTTP1.1连接实现并行下载,在可能的情况下使用HTTP管道计数)。

10,针对协议版本采取优化措施。升级到HTTP2.0。


网络请求:

"GET和POST请求"区别在于参数的传递。GET参数在url后面,参数不能超过1KB,POST的请求放在请求体中,理论上POST传递的数据量没有限制,具体还得按服务器的处理能力。

iOS中发送请求的方案:1,NSURLConnection:是03年推出的技术,没怎么接触过。

2,NSURLSession:13年iOS7推出以后,用来取代NSURLConnection的技术。

3,第三方框架:AFNetworking。工作中用的比较多,方便快捷。

"使用NSURLSession发送网络请求"创建task,然后执行task。

NSURLSessionTask是一个抽象类,本身是不能使用的,只能使用它的子类:NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask。

发送GET和POST请求

/*

发送GET请求:

1,创建NSURLSession对象(或者用单利对象)

NSURLSession *session = [NSURLSession sharedSession];

2,根据URL创建请求。(url后直接跟请求内容)

NSURLRequest *request = [NSURLRequest requestWithURL:url];

3,根据请求创建task。

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {

//拿到响应头信息

NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

//4.解析拿到的响应数据

NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);

}];

4,还得执行task。(task刚创建出来默认是挂起状态的,需要调用该方法启动任务)

[dataTask resume];

还可以使用第二种方法:该方法可以直接填写url参数,内部会将url包装成请求

- (nullable NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error))completionHandler;

发送POST请求:

1,创建NSURLSession对象(或者用单利对象)

NSURLSession *session = [NSURLSession sharedSession];

2,根据URL创建请求对象。(url后请求内容封闭到请求体内部)

NSURLRequest *request = [NSURLRequest requestWithURL:url];

3,修改请求模式为POST。

request.HTTPMethod = @"POST";

4,设置请求体:

request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];

5,根据请求创建task。

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {

//拿到响应头信息

NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

//解析拿到的响应数据

NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);

}];

6,执行task。

[dataTask resume];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 目录 网络基本概念 TCP/IP协议簇基本概念 HTTP 网络开发技术解决方案 数据解析 网络优化 1. 网络基本...
    Ryan___阅读 1,347评论 1 0
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666阅读 1,361评论 0 6
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,637评论 2 7
  • URLSessionNSURLSession是iOS7中新的网络接口,与NSURLConnection是并列的。当...
    醉叶惜秋阅读 1,290评论 0 0
  • 前言 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2....
    GitHubPorter阅读 1,233评论 2 4