HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。
在两台计算机之间使用 HTTP 协议通信时,在一条通信线路上必定有一端是客户端,另一端则是服务器端。
HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。
HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。
使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。
HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术。有了 Cookie 再用 HTTP 协议通信,就可以管理状态了。
HTTP 协议使用 URI 定位互联网上的资源。正是因为 URI 的特定功能,在互联网上任意位置的资源都能访问到。
HTTP/1.1 中可使用的方法(请求服务器的方法):
-
GET:获取资源 我想访问你的某个资源
-
POST:传输实体主体 我要把这条信息告诉你
-
PUT:传输文件 我要把这份文件传给你
-
HEAD:获得报文首部 把那个的相关信息告诉我
-
DELETE:删除文件 快把那份文件删掉吧 与PUT相反的方法,不带验证
-
OPTIONS:询问支持的方法 你支持哪些方法? 支持GET、POST方法
-
TRACE:追踪路径 让Web服务器端将之前的请求通信环回给客户端
-
CONNECT:要求用隧道协议连接代理
为了解决每进行一次HTTP通信就要断开一次TCP连接,提出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或HTTP connection reuse)。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
持久连接使得多数请求以管线化(pipelining)方式发送成为可能。解决了请求发送后必须等待并收到响应后才能发送下一个请求的问题。能够做到同时并行发送多个请求。
使用Cookie解决HTTP无状态