NSURLConnection 是个Cocoa级别的API,构建在NSSream之上,设计时针对4歌常见的URL模式进行了优化支持,文件、HTTP、HTTPS与FTP。NSURLConnection支持同步和异步
两种请求。
Game Kit不需要网络基础设施就能实现,能够实现点对点
的通信。
Bonjou是Apple对零配置(zeroconf)网络的实现,通过名字、服务类型与域这几个元组来引用服务。
NSStream是一个Cocoa级别的API,构建在CFNetwork之上,作为NSRULConnection的基础,旨在完成底层的网络任务。NSStream可以支持使用telnet或SMTP等NSURLConnection不支持的协议进行通信。NSStream是 异步的
,通过NSStreamDelegate实现通信更新。
CFNetwork API位于基础的BSD socket之上,与BSD socket之间的主要差别在于CFNetwork集成了运行循环
。CFNetWork构建在Core Foundation层的CFSocket和CFStream API之上
HTTP协议
HTTP: (Hype Text Transfer Protocol)超文本传输协议
- HTML定义了向文本添加样式的一种方式 > w3shool教程
- HTTP定义了在服务端与客户端之间传输数据的一种方式
- URL定义了在网络机器中定位唯一资源的一种方式
HTTP请求与相应
TCP连接.(三次握手)
Web服务器,浏览器,代理服务器
- 输入URL后,浏览器给Web服务器发送一个Request
- Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器,浏览器解析Response中的HTML,我们就能看到网页了
- Request有可能是经过了代理服务器,最后才到达Web服务器的
代理服务器就是网络信息的中转站,其功能:
1. 提高访问速度,大多数的代理服务器都有缓存功能
2. 突破限制,翻墙
3. 隐藏身份
URL结构
schema://host[:port]/path/…/[?query-string][#anchor]
协议://主机名:[端口]/绝对路径/[?查询字符串1&查询字符串2][锚]
http://www.mytestsite.com/dorayo/tese/test.aspx?name=dorayo&x=true#stuff
默认端口号为80
绝对路径和查询字符串不可能包含空格、回车、换行符,因此URL通常会使用百分号
进行编码。RFC规定了URL百分号编码的详细信息
请求内容
- 请求行
- 请求头
- 请求体
请求行 | METHOD/path-to-resource HTTP/Version-number |
---|---|
请求头 | Header-Name-1:Value Header-Name-1:Value |
请求体 | Optionalrequest body |
* Method表示请求方法,比如“POST”,“GET”
* Path-to-resoure表示请求的资源
* HTTP/Version-number表示HTTP协议的版本号
* 当使用的是“GET”
方法的时候,boby是为空的(默认方法为‘GET’)
HTTP是无状态的协议
请求体必须遵循客户端与服务端之间预先确定的数据编码,对应Web浏览器
来说,这通常是表示单编码数据,对于移动端
应用来说,该编码通常是XML或JSON数据。
响应内容
- 状态行
- 响应行
- 相应体
状态行 | HTTP/Version-number status code message |
---|---|
响应头 | Header-Name-1:Value Header-Name-1:Value |
响应体 | Optionalrequest body |
* HTTP/version-number表示HTTP协议的版本号
* status code表示状态码
* message表示状态消息
状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response
HTTP协议和Connection:keep-alive的区别
HTTP是一个无状态的面向连接的协议,无状态并不代表HTTP不能TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。
从HTTP1.1起,默认开启keep-alive,保持连接(默认时间为10分钟)。
Cocoa层iOS HTTP API
在URL加载系统中,有3个方式可以执行HTTP请求和接收响应
- 同步 (线程会被阻塞)
- 队列式异步 (创建以一个队列并放入后台线程执行)
- 异步 (调用委托方法)
所有的URL加载请求方式都会用到这4类对象
1. NSURL
2. NSURLRequest
3. NSURLConnection
4. NSURLResponse
TCP链接、断开
重点 建立TCP链接(三次握手,数据段互换)
- 由客户端发送一个链接请求给服务器.( SYN = 1 , seq = client_isn)
- 服务器授予链接( SYN = 1 , seq = client_isn) ack = cline_isn +1
- 客户端确认,反馈给服务器( SYN = 0 , seq = client_isn + 1) ack = cline_isn + 1
断开TCP链接(四次握手)
- 客户端发起中断链接请求(FIN报文)
- 服务器发送ACK。(这时客户端进去FIN_WAIT状态,继续等待服务器的FIN报文)
- 客户端收到FIN报文后,就知道可以断开了
- 客户端给服务器发送ACK,告诉服务器要关闭了,进入TIME_WAIt状态,等待2秒无回复,则证明服务器已正常关闭,然后,客户端也可以关闭链接。