网络编程
C/S,B/S系统架构。
手机客户端
Web App Html5
C/S:客户/服务器
服务器端开发语言:
java
.net
C/C++
php
python
Ruby
Node.js javascript
文本数据:JSON数据、XML数据。
图片数据:
音频数据:
视频数据:
数据通讯:
HTTP协议的基本概念:
·全称“超文本传输协议”,浏览器和服务器之间的通信规则
·HTTP协议永远是客户端发起请求,客户端回送响应。
客户端——>服务器端的数据格式:1.JSON 2.XML(使用较少)3.key1=value1&key2=value2......(轻量级)
服务器端——>客户端数据格式:1.JSON 2.XML
GET请求:是向服务器索取的一种请求方式
POST请求:是向服务器提交数据的一种请求方式(只有POST才有请求体),如用户登陆。请求的参数有两种形式:1.放在URL后面,2.放在请求体中。
HTTP请求
HTTP请求主要由两部分组成:http请求头,http请求体。
POST请求才有请求体。
HTTP响应
HTTP响应头:
HTTP响应内容:
HTTP响应码:
200表示成功
404页面不存在
500以上响应码表示服务器程序出现问题
访问网络的基本概念
#访问网络的方式
*同步请求:数据的请求过程是在主线程来执行的。网络数据加载需要一个时间,这样的话会堵塞主线程。
*异步请求:数据的请求过程在多线程中执行。
*同步请求无法取消,异步请求过程中可以取消。同步请求无法监听加载进度,异步请求可以监听。
#网络请求组件
CFNetwork是一种底层的高性能架构,他是基于BSD sockets的基础上做了拓展。
NSURLConnection组件
#访问网络的基本流程:
1.构造NSURL实例(地址);
2.构造请求NSURLRequest;
3.构造启动链接NSURLConnection;
4.发送同步请求/异步请求;
5代理对象实现协议,用于监听通讯事件。
#NSURL释义和常用方法
* NSURL实例包装了一个地址信息,可以使本地地址,也可以是网络地址。
*常用方法
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"];
NSLog(@"Scheme:%@",[url scheme]);//Scheme:http
NSLog(@"Host:%@",[url host]);//Host:www.baidu.com
NSLog(@"AbsoluteString:%@",[url absoluteString]);//AbsoluteString:http://www.baidu.com:8080/search?id=1
NSLog(@"RelativePath:%@",[url relativePath]);//RelativePath:/search
NSLog(@"Port:%@",[url port]);//Port:8080
NSLog(@"Path:%@",[url path]);//Path:/search
NSLog(@"PathComponents:%@",[url pathComponents]);//PathComponents:("/",search)
NSLog(@"Query:%@",[url query]);//Query:id=1
#NSURLRequest不可变请求对象,不能动态添加请求信息。
NSURLRequest包装了网络请求的信息。
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
#NSURLRequest的缓存策略:
NSURLRequest的cachePolicy属性可以设置缓存的的策略。这是一种内存缓存,非硬盘缓存。
使用缓存的目的是为了使用的应用程序能更快的响应用户输入,使程序高效的运行。有的时候我们需要将远程web服务器获得的数据缓存起来,减少对同一个url的多次请求。
cachePolicy支持的缓存策略:
·NSURLRequestUseProtocolCachePolicy 默认的缓存策略,要在协议的实现方法中指定缓存逻辑
·NSURLRequestReloadIgnoringCacheData 忽略缓存从原始地址下载
·NSURLRequestReturnCacheDataElseLoad 没有缓存时从原始地址下载
·NSURLRequestReturnCacheDataDontLoad 只使用缓存,如果不存在缓存,请求失败,适用于没有建立 网络连接离线模式
·NSURLRequestReloadIgnoringLocalAndRemoteCacheData 忽略本地和远程的缓存数据,直接从原始 地址下载,与NSURLRequestReloadIgnoringCacheData类似
·NSURLRequestReloadRevalidatingCacheData 验证本地数据与远程数据是否相同,如果不同则下载远 程数据,否则使用本地数据
NSMutableURLRequest实例可以对请求信息重新设置
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setTimeoutInterval:60];
[request setHTTPMethod:@"GET"];
[request setHTTPBody:_data];
[request setValue:@"tttt" forHTTPHeaderField:@"cookes"];