2.1 HTTP协议用于客户端和服务器端之间的通信
HTTP协议能够明确区分哪端是客户端,哪段是服务器端。
2.2 通过请求和响应的交换
2.3 HTTP是不保存状态的协议
HTTP是一种不保存状态,即无状态协议。HTTP对于发送过的请求或响应都不做持久化处理。
使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。
虽然HTTP是无状态协议,但是为了实现期望的保持状态功能(如:网站需要保存用户登录状态,以便用户不用每次访问都要登录),引入了Cookie技术,可以管理状态。
2.4 请求URI定位资源
2.5 告知服务器意图的HTTP方法
GET:获取资源
GET方法用于请求访问已被URI识别的资源。
POST:传输实体主体
虽然GET方法也可以传输实体的主体,但是一般不用GET方法传输,而是用POST方法。
PUT:传输文件
PUT方法用来传输文件:要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
HEAD:获得报文首部
和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间。
DELETE:删除文件
DELETE方法用于删除文件,按照请求URI删除指定的资源。
OPTIONS:询问支持的方法
查询针对请求URI指定的资源支持的方法
TRACE:追寻路径
让Web服务器端将之前的请求通信环回给客户端。
发送请求时,在Max-Forwards首部字段中填入数值,没经过一个服务器端就将该数字减1,当数值刚好减到0时,就停止继续传输,最后接收到请求的服务器端则返回状态码200 OK的响应。
CONNECT:要求用隧道协议连接代理
要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。
2.6 使用方法下达命令
2.7 持久连接节省通信量
HTTP协议的初始版本中,每进行一次HTTP通信,就需要断开一次TCP连接。但是当一个网页内包含多个图片或者其他资源的的时候,每次请求就会造成无谓的TCP连接建立和断开:
2.7.1 持久连接
持久连接的特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态。
减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。
在HTTP/1.1中,所有连接默认都是持久连接。
2.7.2 管线化(pipelining)
持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前必须等待响应后才能发送下一个请求。管线化技术可以让多个请求并行发送,而不用一个一个等待响应。
2.8 使用Cookie的状态管理
Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端状态。
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存
Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出
去。
服务器端收到客户端发送过来的 Cookie 后,会去检查究竟是从哪个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
- 第二次以后(存有 Cookie 信息状态)的请求
上述两图的具体HTTP请求报文和响应报文如下: