一、URL
【概念】NSURL
URL
:Uniform Resource Locator
统一资源定位符
是资源在网路上的地址,位置,每个资源都有一个唯一的
URL
【例子】
百度 http://www.baidu.com/
爱限免 http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=3
比较有代表性
【URL的组成】
1.http://(协议)
协议:规定了资源的查找和传输方式,网络连接要遵循这一协议
2.iappfree.candou.com
域名或者ip
,主机的地址
:8080,端口(可有可无,由服务器开端给开通,默认值是
80)
3.free/applications/limited?
路径,以?结束
资源在主机中的位置
4.currency=rmb&page=3
参数,一般是服务器提出来的,规定参数字段,服务器必须认得这些参数
不能想传啥就传啥
字段名
=参数值
&(以
&号分隔多个参数)
二、HTTP
错误简历:“熟练掌握
HTTP、
TCP/UDP、
Socket等网络协议”,学完这节课你们来分析出现的问题
【概念】
http:hypertext transfer protocol超文本传输协议
访问远程服务器的最常用协议、特点是简单快捷灵活 是基于请求和响应模式,基于
TCP连接的
无状态
应用层协议
HTTP协议请求:
1个完整的由客户端发给服务器的
HTTP请求中包含以下内容
请求行:包含了请求方法、请求资源路径、
HTTP协议版本 GET /MJServer/resources/images/1.jpg HTTP/1.1
请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息 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协议响应:
1个完整的
HTTP响应中包含以下内容:
状态行:包含了
HTTP协议版本、状态码、状态英文名称 HTTP/1.1 200 OK
响应头:包含了对服务器的描述、对返回数据的描述 Server: Apache-Coyote/1.1 //
服务器的类型 Content-Type: image/jpeg //
返回数据的类型 Content-Length: 56811 //
返回数据的长度 Date: Mon, 23 Jun 2014 12:54:52 GMT //
响应的时间
实体内容:服务器返回给客户端的具体数据,比如文件数据
【请求(request)】客户端发送给服务器的数据,根据服务器的协议通知给它,让它对数据处理,筛选和分发
请求行:包含了请求方法、请求路径、
HTTP协议的版本
请求头:包含了客户端的环境描述、客户端请求的主机地址等信息
请求体:客户端发给服务端的具体数据
【响应(respond)】:服务器接收到请求后回馈响应,包括建立稳定的
TCP连接,传输数据
状态行:包含
HTTP协议版本、状态码、状态英文描述
响应头:包含了对服务器的描述,返回数据的描述
实体内容:服务器返给客户端的具体数据
其他常见协议
https: (HTTPS协议是由
SSL(加密协议
)+HTTP协议构建的可进行加密传输、身份认证的网络协议,比
http协议安全。
)
file
:(本地计算机)
ftp:(访问共享主机的资源文件)
常见的
HTTP状态码和短语
200 OK:请求成功,信息包含在返回的响应报文中。
301 Moved Permanently:请求的对象已经被永久转移了,新的
URL定义在响应报文的
Location首部行中指定。客户机可自动用新的
URL获取该对象。
400 Bad Repuest:一个通用差错代码,指示该请求不能被服务器所理解。
403
禁止访问 404 Not Found
:被请求的文档不在服务器上。
505
网关错误 505 HTTP Version Not Supported
:服务器不支持请求报文使用的HTTP
协议版本。 206 RANGE: bytes=2000070-
断点续传
三、【TCP/IP】
http
是怎样连上的,靠的就是TCP
【概念】
Transmission Control Protocol
传输控制协议,
对应就有UDP User Data Protocol
用户数据协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接
: 位码即
tcp标志位
,有
6种标示
: SYN(synchronous
建立联机) ACK(acknowledgement
确认) PSH(push
传送) FIN(finish
结束) RST(reset
重置) URG(urgent
紧急) Sequence number(
顺序号码) Acknowledge number(
确认号码)
【建立连接三次握手】
第一次握手:建立连接时,客户端发送
syn包
(syn=j)到服务器,并进入
SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到
syn包,必须确认客户的
SYN(
ack=j+1),同时自己也发送一个
SYN包(
syn=k),即
SYN+ACK包,此时服务器进入
SYN_RECV状态;
第三次握手:客户端收到服务器的
SYN+
ACK包,向服务器发送确认包
ACK(ack=k+1),此包发送完毕,客户端和服务器进入
ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据
.
syn是建立连接的请求,
seq是序列号即位码,这是为了连接以后传送数据用的,
ack是对收到的数据包的确认,值是等待接收的数据包的序列号。 在第一次消息发送中,
A随机选取一个序列号作为自己的初始序号发送给
B;第二次消息
B使用
ack对
A的数据包进行确认,因为已经收到了序列号为
x的数据包,准备接收序列号为
x+1的包,所以
ack=x+1,同时
B告诉
A自己的初始序列号,就是
seq=y;第三条消息
A告诉
B收到了
B的确认消息并准备建立连接,
A自己此条消息的序列号是
x+1,所以
seq=x+1,而
ack=y+1是表示
A正准备接收
B序列号为
y+1的数据包。
【断开连接要四次握手】
由于
TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个
FIN来终止这个方向的连接。收到一个
FIN只意味着这一方向上没有数据流动,一个
TCP连接在收到一个
FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 (
1)客户端
A发送一个
FIN,用来关闭客户
A到服务器
B的数据传送。 (
2)服务器
B收到这个
FIN,它发回一个
ACK,确认序号为收到的序号加
1。和
SYN一样,一个
FIN将占用一个序号。 (
3)服务器
B关闭与客户端
A的连接,发送一个
FIN给客户端
A。 (
4)客户端
A发回
ACK报文确认,并将确认序号设置为收到序号加
1。 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢? 这是因为服务端的
LISTEN状态下的
SOCKET当收到
SYN报文的建连请求后,它可以把
ACK和
SYN(
ACK起应答作用,而
SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的
FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭
SOCKET,也即你可能还需要发送一些数据给对方之后,再发送
FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的
ACK报文和
FIN报文多数情况下都是分开发送的
.
【TCP与UDP的区别】
TCP 1.面向连接(要进行三次通信才能连上) 2.
占系统资源较多,结构稍复杂 3.
流模式
4.保证数据准确,保证数据顺序,不丢包
UDP 1.面向非连接(不需要连接,直接发,
ping,
QQ即时通讯) 2.
占系统资源较少,结构简单 3.
数据报模式 4.
有可能数据不准、丢包
四、请求方法【GET/POST】
http使用的默认是用的是GET
(1)GET: 参数是写在
URL地址上的
,明文传送
,安全性低
,而且有长度限制
(8000个字节左右
),浏览器决定了明文
URL的长度
,所以
get请
求的长度也就受限制了
(2)POST: 参数一般是以二进制
(NSData/NSMutableData)的方式将参数传递给服务器
,能够上传很大的数据
,那么具体能够上传多大的数据
(后台服务器决定
),如果在开发中发现上传数据经常失败
,就需要确认服务器是否做了上传大小限制
建议:
(1)GET方式的安全性较
POST方式要差些,包含机密信息的话,建议用
POST数据提交方式
;
(2)在做数据查询时,建议用
GET方式;而在做数据添加、修改或删除时,建议用
POST方式
;
【其他常见方法】 HEAD
、PUT
和DELETE
等
HEAD请求
:跟
get请求类似,但是会得到报文头的回馈,便于检测数据的传输方式和数据是损坏等信息。