HTTP协议用于客户端和服务器之间的通信
应用HTTP协议时,总是一端作为客户端发送请求,一端作为服务器响应请求,而且发送请求只能通过客户端发送。
通过请求响应的交换达成通信
请求总是由客户端发出,服务器响应,如果服务器没有收到请求不会作出响应的。
比如说有一个请求的实例
请求的格式是 方法 + URI + HTTP版本还有可选的请求首部。
响应的格式为 HTTP版本 + 状态码 + 状态
HTTP是不保存状态的协议
补充
HTTP为了提供快速的连接和减少服务器的负担,以便可以更快地处理大量事务,设计之初故意使用成不保存状态的。但是无状态的HTTP不能满足现在的需求,于是有了Cookie。
请求URI定位资源
客户端向服务器请求资源时要带上要请求的资源,比如说
https://www.baidu.com/img/baidu_jgylogo3.gif
请求的就是百度首页的logo
告知服务器意图的HTTP方法
移动开发者最常使用的HTTP方法有两个
- GET: 顾名思义,就是通过URI向服务器索取资源,然后服务器返回请求的资源
- POST:传输实体的主体。虽然GET方法也可以传输,但通常不用GET来实现,通常使用POST向服务器传输实体的主体。
持久化连接节省通信量
还记得第一章所说的
TCP会将大数据切割成 以报文段(segment)为单位的数据包传送,而为了保持“安全可靠”,采用了三个握手。
下面看一个例子
对于这样一个网页,如果每请求一个资源都要三次握手对服务器造成的负担太大,而采用持久化(keep-active)以减小服务器的压力,同时也会提高网页的加载速度。
持久连接的特点就是:任意一端没有断开连接,那么就保持TCP连接。
使用Cookie的状态管理
Cookie的作用是保存连接状态。比如说,登陆社交网站的用户需要持续的保持登陆的状态才能正常的上网,Cookie就是完成这样的事情。
具体来说,客户端获取从服务器的响应里面的set-cookie字段信息,客户端在下一次请求时带上这个字段。服务器响应请求时会查看这个cookie的信息和之前保存的设备信息是否一致,如果一致那么就返回之前保存的状态。
- 没有cookie时的请求报文
GET / HTTP/1.1
HOST:gX.com
*没有cookie信息
- 响应报文(服务器生成Cookie 信息)
HTTP/1.1 200 OK
Date:Sun, 10 Jan 2016 03:25:38 GMT
Server:Apache
<Set-Cookie:sid=143243234234323412355;path:/;Expires: Mon, 11 Jan 2016 15:55:31 GMT
>
- 请求报文
GET /image/ HTTP/1.1
Host: hackr.jp
Cookie:sid=143243234234323412355
而《图解HTTP》一书中图文讲解的这个知识点特别生动