HTTP 协议简读
我们终于要开始接触网络这部分知识了,在我们继续一边写 demo 一边学习的之前,我打算用一两章节来简单的学习一下 HTTP 的基础知识
为什么要学习 HTTP ?
因为,这是我们 APP 日常浏览量网上资源所使用的协议,就像我们日常网上购物一样,我们必须知道怎么买,怎么付钱,哪家物流,我们要怎么收快递,HTTP 协议就是这一篮子的事情
为什么是 HTTP 协议 ?
日常开发中,APP 与服务器打交道一般是基于 HTTP
协议的
所以了解 HTTP
协议的基本知识很有必要
什么是 HTTP 协议?
HTTP ( HyperText Transfer Protocol),中文超文本传输协议
用于定义 WEB 浏览器与 WEB 服务器之间交换数据的过程
用户代理(浏览器) 连上 Web 服务器后,若想获得 web 服务器 中的某个 web 资源,需遵守一定的通讯格式,HTTP 协议用于定义客户端与 web 服务器通迅的格式
HTTP 1.0 与 HTTP 1.1 的区别
-
1.0 协议,客户端与 web 服务器建立连接后,只能获得一个 web 资源
-
1.1 协议,允许客户端与 web 服务器建立连接后,在一个连接上获取多个 web 资源
HTTP 协议的底层工作流程
首先解释两个名词
名词 | 说明 |
---|---|
SYN (SYNchronous) | TCP/IP 建立连接时使用的握手信号 |
ACK (ACKnowledgement) | 确认字符,确认发来的数据已经接受无误 |
TCP/IP 三次握手
客户端与服务器端连接过程要经历三次握手,用来相互确认对方身份
-
客户端发送
syn
包(syn = j
)到服务器,进入SYN_SEND
状态,然后等待服务器确认 -
服务器收到
syn
包,确认客户的syn(ack = j + 1)
,同时在自己也发送一个SYN
包(syn=k)
,即SYN + ACK
包,服务器进入SYN_RECV
状态 -
客户端收到
SYN + ACK
包,向服务器发送确认包ACK(ack = k +1)
,发送完毕后,客户端与服务端进入ESTABLISHED
状态,完成三次握手,然后两者开始传送数据
HTTP 协议一般流程
-
用户点击网页上的链接,比如点 简单教程,浏览器就会与 WEB 服务器建立连接
TCP
链接 -
建立连接后,客户端发送请求给服务器,请求的格式为:
请求方法 + 统一资源标识符(URL)+ 协议版本号(一般是 HTTP/1.1) + (多个消息头)+ 一个空行
比如
-
服务端收到请求后,给予相应的返回信息,返回格式为
协议版本号 + 状态行(处理结果) + 多个信息头 + 空行 + 实体内容(比如返回的 HTML)
-
客户端接收服务端返回信息,通过浏览器显示出来,然后与服务端断开连接
当然如果中途某步发生错误的话,错误信息会返回到客户端,并显示,比如:经典的 404 错误
HTTP 协议规定的几种请求方法
方法 | 说明 |
---|---|
GET | 请求获取 Request-URI 所标识的资源 |
POST | 在 Request-URI 所标识的资源后附加新的数据 |
HEAD | 请求获取由 Request-URI 所标识的资源的响应信息报头 |
PUT | 请求服务器存储一个资源,并用 Request-URI 作为其标识 |
DELETE | 请求服务器删除 Request-URI 所标识的资源 |
TRACE | 请求服务器回送收到的请求信息,主要用于测试或诊断 |
CONNECT | 保留将来使用 |
OPTIONS | 请求查询服务器的性能,或者查询与资源相关的选项 |
实际开发中我们用得较多的方式是 GET
和 POST
GET 和 POST 的对比
HTTP 协议中所有的请求方法,用得最多的就是这两个用得最多的两个
GET
和 POST
请求都能发送数据,只是发送数据的机制不一样
-
GET
在请求的 URL 地址后以
?
的形式带上交给服务器的数据,多个数据之间以&
进行分隔http://xxx?username=yufei&id=8
数据容量通常不能超过
2K
-
POST
可以在请求的实体内容中向服务器发送数据,传输没有数量限制
常用HTTP 应答状态码
HTTP 协议规定了一系列的状态码用于表示服务器的状态或者资源请求的状态
状态码 | 说明 |
---|---|
100~199 | 成功接受请求,客户端需提交下一次请求才能完成整个处理过程 |
200 | OK,客户端请求成功 |
300~399 | 请求资源已移到新的地址(302,307,304) |
401 | 请求未授权,改状态代码需与WWW-Authenticate报头域一起使用 |
403 | Forbidden,服务器收到请求,但是拒绝提供服务 |
404 | Not Found,请求资源不存在,这个就不用说啦 |
500 | Internal Server Error,服务器发生不可预期的错误 |
503 | Server Unavailable,服务器当前不能处理客户端请求,一段时间后可能恢复正常 |
HTTP 协议的特点
-
支持客户/服务器模式
-
简单快速
客户向服务器请求服务时,只需传送请求方法和路径
请求方法常用的有GET、HEAD、POST
每种方法规定了客户与服务器联系的类型不同
由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快
-
灵活
HTTP 允许传输任意类型的数据对象,可以使用
Content-Type
头来标记传输的类型 -
无连接
无连接的含义是限制每次连接只处理一个请求
服务器处理完客户的请求,并收到客户的应答后,即断开连接
-
无状态
HTTP 协议是无状态协议
无状态是指协议对于事务处理没有记忆能力
缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每 次连接传送的数据量增大
另一方面,在服务器不需要先前信息时它的应答就较快