iOS网络相关零散知识总结

1. URL和HTTP知识

(1)
URL的全称是Uniform Resource Locator(统一资源定位符)。

URL的基本格式 = 协议://主机地址/路径      例如:http://202.108.22.5/img/bdlogo.gif
协议:不同的协议,代表着不同的资源查找方式、资源传输方式
主机地址:存放资源的主机的IP地址(域名)
路径:资源在主机中的具体位置
(2)
HTTP的全称是Hypertext Transfer Protocol,超文本传输协议
HTTP作用:规定客户端和服务器之间的数据传输格式
(3)
HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容
请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息

Host: 192.168.1.105:8080   // 客户端想访问的服务器主机地址

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0

// 客户端的类型,客户端的软件环境

Accept: text/html, */*   // 客户端所能接收的数据类型

Accept-Language: zh-cn   // 客户端的语言环境

Accept-Encoding: gzip   // 客户端支持的数据压缩格式

请求行:包含了请求方法、请求资源路径、HTTP协议版本

GET /MJServer/resources/images/1.jpg HTTP/1.1

请求体:客户端发给服务器的具体数据,比如文件数据
(4)
HTTP协议规定:1个完整的HTTP响应中包含以下内容:

响应头:包含了对服务器的描述、对返回数据的描述

Server: Apache-Coyote/1.1   // 服务器的类型

Content-Type: image/jpeg   // 返回数据的类型

Content-Length: 56811   // 返回数据的长度

Date: Mon, 23 Jun 2014 12:54:52 GMT  // 响应的时间

状态行(响应行):包含了HTTP协议版本、状态码、状态英文名称     例如:HTTP/1.1 200 OK

响应正文(响应体):服务器返回给客户端的具体数据,比如文件数据

2.创建网络请求request

(1) NSMutableURLRequest常用方法有

- (instancetype)initWithURL:(NSURL *)URL;

+ (instancetype)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;

(2) NSMutableURLRequest常用方法有

- (void)setTimeoutInterval:(NSTimeInterval)seconds; //设置请求超时等待时间

- (void)setHTTPMethod:(NSString *)method; //设置请求方法(比如GET和POST)

- (void)setHTTPBody:(NSData *)data;  // 设置请求体

- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field; // 设置请求头

(3) 创建GET请求

NSString *urlStr = [@"http://192.168.1.102:8080/MJServer/login?username=123&pwd=123" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlStr];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

(4) 创建POST请求

NSString *urlStr = @"http://192.168.1.102:8080/MJServer/login";

NSURL *url = [NSURL URLWithString:urlStr];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

request.HTTPMethod = @"POST";

NSString *bodyStr = @"username=123&pwd=123";   // 请求体

request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; // 请求体

3.收发网络请求+解析JSon数据

苹果自带:发收请求:CFNetwork(底层)、URLConnection、URLSession(ios7以后)

     解析数据:NSJSONSerialazation

以前第三方:发收请求:ASIHttpRequest     解析数据:SBJSon

现在第三方:发收请求+解析数据 AFNetworking (封装URLSession和NSJSONSerialazation)

4.NSURLConnection发请求:

(1)发请求步骤:

、】

(2)NSURLConnection类的方法

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

+ (void)sendAsynchronousRequest:(NSURLRequest*) request  queue:(NSOperationQueue*) queue  completionHandler:

(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;

5. JSON数据的解析

NSJSONSerialization的常见方法
//JSON数据(data) ——> JSON对象(JSONObject) 

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

//JSON对象(JSONObject) ——> JSON数据(data)

+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

6.XML的解析

(1)解析工具
苹果原生:  NSXMLParser:SAX方式解析,使用简单
第三方框架:
libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX方式解析
GDataXML:DOM方式解析,由Google开发,基于libxml2
(2)解析方式:
DOM:一次性将整个XML文档加载进内存,比较适合解析小文件
SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件
(3)解析工具的选择:
大文件:NSXMLParser、libxml2
小文件:GDataXML

7. 缓存机制NSURLCache类

(1)一般只对GET请求进行缓存,不必对POST请求进行缓存。GET请求一般用来查询数据,POST请求一般是发大量数据给服务器处理(变动性比较大)。
(2)在iOS中,可以使用NSURLCache类缓存数据, iOS 5开始:同时支持 内存缓存 和 硬盘缓存。
(3)NSURLCache缓存原理:一个NSURLRequest对应一个NSCachedURLResponse。 缓存技术实现:数据库
 
(4)  想对某个GET请求进行数据缓存,非常简单,只需要对GET请求的request设置缓存策略,系统会自动利用NSURLCache进行数据缓存。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 设置缓存策略

request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;

// 缓存策略有哪些?

NSURLRequestUseProtocolCachePolicy // 默认的缓存策略(取决于协议)
NSURLRequestReturnCacheDataElseLoad // 有缓存就用缓存,没有缓存就重新请求
NSURLRequestReturnCacheDataDontLoad  // 有缓存就用缓存,没有缓存就不发请求,当做请求出错处理(用于离线模式)

(5) 取得某个请求的缓存

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request;

清除某个请求的缓存

- (void)removeCachedResponseForRequest:(NSURLRequest *)request;

清除所有的缓存

- (void)removeAllCachedResponses;

(6) 使用缓存需谨慎:

如果请求某个URL的返回数据:
经常更新:不能用缓存!比如股票、彩票数据
一成不变:果断用缓存
偶尔更新:可以定期更改缓存策略 或者 清除缓存
如果大量使用缓存,会越积越大,建议定期清除缓存
 
 
 

iOS网络相关零散知识总结的更多相关文章

  1. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  2. IOS 蓝牙相关-基础知识(1)

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

  3. iOS网络基础知识

    iOS网络基础知识 1.一次HTTP请求的完整过程 (1)浏览器或应用发起Http请求,请求包含Http请求Http(请求),地址(url),协议(Http1.1)请求为头部 (2)web服务器接收到 ...

  4. iOS蓝牙开发(二)蓝牙相关基础知识

    原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...

  5. LINUX涉及网络相关知识

    才接触到网络的老铁,是否比较晕呢? 简单记录一下网络相关知识吧(IPV4)! A0. 网络号.主机号 A1.网络地址分类: A2. 保留地址: A3. 子网掩码作用:(子网掩码.IPV4地址做“与”运 ...

  6. day 28 网络基础相关的知识

    1.网络基础相关的知识 架构 C/S 架构:  client 客户端  server服务器端 优势: 能充分发挥PC机的性能 B/S 架构: browser 浏览器 server服务器       隶 ...

  7. 一文让你彻底了解iOS字体相关知识

    写本文的契机主要是把自己整理的关于iOS字体方面的知识不断更新写在这篇博文中,用来自己以后查阅. 一.iOS原生字体展示 在label中选择字体的font,并把font由system改成custom后 ...

  8. 【RAC】RAC相关基础知识

    [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...

  9. iOS多线程编程的知识梳理

    多线程编程也称之为并发编程,由于其作用大,有比较多的理论知识,因此在面试中也是受到面试官的青睐.在日常项目开发中,至少网络请求上是需要使用到多线程知识的,虽然使用第三方的框架比如AFNetworkin ...

随机推荐

  1. MS10048依旧是Windows 2003 x86 的杀器

    今天搞了个wow的游戏论坛,服务器环境是win03 x86+iis6.0+php+mysql. 提权的时候各种无奈,mysql无权限,而且没root,试了几个别的方法都不行,实在没办法的时候,用MS1 ...

  2. JS - 超强大文本动画插件Textillate.js

    http://www.yyyweb.com/demo/textillate/ Textillate.js AsimplepluginforCSS3textanimations.

  3. 通过IP的方式建立PSSession

    Import-Module PoshWSUS Connect-PoshWSUSServer -WsusServer cnhzsrv09 Get-PoshWSUSClient | Select-Obje ...

  4. IIS5与IIS6 应用程序生命周期和页生命周期

    在写这篇博客之前,知好多前辈已经写过,自己班门弄斧,主要是加深自己对细节的理解,另一方面希望对浏览此篇文章的读者一个新的认识.注定是一长篇.肯定有新的认识,图示都是原创. 此篇所有牵涉的细节,我会一一 ...

  5. linux下挂在u盘,移动硬盘的方法,转移服务器资料的时候,使用移动硬盘什么最方便了

    本文章是在centos环境下操作的 最近linux服务器我不小心吧root下面的用户配置,不能远程登录,而且我对linux系统配置也不熟悉,最后的办法就是去了一趟机房,还好是在深圳南山科技园,不算太远 ...

  6. python twisted启动定时服务

    以下是python脚本send_mms.py #############################################!/usr/bin/python# -*- coding: ut ...

  7. UnrealEngine4 PBR Shading Model 概述

      虽然是概述,但内容并还是有些多,写上一篇PBR概念概述后,也在考虑怎么继续下去,最后还是觉得先多写一些东西再慢慢总结,所以还是尽量把这些年PBR相关的Paper精粹沉淀下来吧.     因为UE4 ...

  8. ecshop lang用法

    ecshop lang用法 分类: ECSHOP2013-08-15 16:17 2184人阅读 评论(0) 收藏 举报 ecshop目录下的languages目录.这个是ecshop语言包所在.ec ...

  9. 异步调试神器Slog,“从此告别看日志,清日志文件了”

    微信调试.API调试和AJAX的调试的工具,能将日志通过WebSocket输出到Chrome浏览器的console中  — Edit 92 commits 4 branches 3 releases ...

  10. 解决ORA-00054资源正忙的问题

    有时候在drop表或者其他对象的时候,会遇到ORA-00054:资源正忙,要求指定NOWAIT(中文字符集)或者ORA-00054: resource busy and acquire with NO ...