这部分主要针对HTTP协议(主要针对HTTP/1.1)结构进行讲解,包括HTTP是在什么之间进行通信,靠什么通信,以及HTTP支持的方法; 还有HTTP的进化史,曾经的弊端,现在是怎么进行进化和蜕变的。
应用HTTP协议时,必定是一端担任客户端角色,另一端担任服务端角色。
请求必定由客户端发出,而服务端回复响应。
GET /index.html HTTP/1.1
Host: hackr.jp
对上面的内容进行解析请求报文的构成:
HTTP/1.1 200 OK
Date: Tue 10 Jul 2017 06:50:15 GMT
Content-Length:362
Content-Type: text/html
<html>
......
对上面的内容进行解析响应报文的构成:
HTTP方法用于客户端给服务器下达命令。
下表是HTTP/1.0和HTTP/1.1支持的方法:
方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获取报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINK | 断开连接关系 | 1.0 |
我们知道,HTTP是无状态协议,也就是HTTP协议自身不具备保存之前发送过的请求或响应的功能。
HTTP无状态的特点,有利有弊。
所以为了实现期望的保存状态功能,引入Cookie技术。
下图展示了没有cookie和有了cookie之后的请求:
我们可以看一下请求报文和响应报文有cookie和没cookie的区别:
(1)没有cookie的请求报文
GET /index.html HTTP/1.1
Host: hackr.jp
(2)有cookie的响应报文
HTTP/1.1 200 OK
Date: Tue 10 Jul 2017 06:50:15 GMT
Server: Apache
<Set-Cookie:sid=134780956002374590924; path=/; expires=Wed,=>10 Jul 2017 06:50:15 GMT>
Content-Type: text/plain; charset=UTF-8
(3)有cookie的请求报文
GET /index.html HTTP/1.1
Host: hackr.jp
Cookie: sid=134780956002374590924
在http1.0中,一个request,一个response,一个周期就结束了。
在http1.1中,有了keep-alive,可以发送多个Request,接收多个Response(但一个request还是对应一个response),也就是持久连接。
一个request,一个response,但只要任意一端没有明确提出断开,就保持连接。
发送多个Request,接收多个Response。
请求数越多,时间差就越明显。