应用HTTP协议时,必定时一端担任客户端角色,一端是担任服务器端角色。请求必定由客户端发出,而服务器端回复响应。由此达成通信。
HTTP是无状态协议
HTTP本质是无状态的。为了更快地处理大量事务,确保协议的可伸缩性。HTTP协议对于发送过的请求或响应都不做持久化处理。有新的请求发送时,就会有新的响应产生。
使用Cookies可以创建有状态的会话。把Cookies添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。
实际的数据状态可能存在服务器中,但通过 Cookie 将一个 id 信息传到客户端,并由客户端持久化,客户端通过 id 就可获得数据的状态。
使用方法告知意图
通过HTTP请求方法,简单告知请求的意图。
GET
:获取资源。POST
:传输实体的主体。通过body传输数据。PUT
:传输文件。但该方法不存在验证机制,任何人都可以上传文件,存在安全性问题。HEAD
:获取报文首部。用于确认URI的有效性以及资源更新的日期时间等。DELETE
:删除文件。与PUT对应,但也没有验证机制,存在安全性问题。OPTIONS
:查询服务器支持的方法。TRACE
:追踪路径。容易引发跨站攻击,通常不会用到。CONNECT
:要求用隧道协议连接代理。要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要是用SSL和TSL协议把通信内容加密后经网络隧道传输。
持久连接节省通信量
大量的 TCP 连接建立和断开,都会加载通信量的开销。为此,推出了持久连接(HTTP Persistent Connections,也称为 HTTP Keep-alive 或 HTTP connection reuse)方法。
只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
持久化使得多数请求以管线化(pipelining)方式发送成为可能。这样就能够做到同时并行发送多个请求。