HTTP的基本性质
HTTP 是简单的
虽然下一代 HTTP/2 协议将 HTTP 消息封装到了帧(frames)中,HTTP 大体上还是被设计得简单易读。HTTP 报文能够被人读懂,还允许简单测试,降低了门槛,对新人很友好。
HTTP 是可扩展的
在 HTTP/1.0
中出现的 HTTP headers
让协议扩展变得非常容易。只要服务端和客户端就新 headers
达成语义一致,新功能就可以被轻松加入进来。
HTTP 是无状态,有会话的
HTTP
是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的。
注意,HTTP
本质是无状态的,使用 Cookies
可以创建有状态的会话。
HTTP 和连接
在互联网中,有两个最常用的传输层协议:TCP
是可靠的,而 UDP
不是。因此,HTTP
依赖于面向连接的 TCP
进行消息传递,但连接并不是必须的。
在客户端(通常指浏览器)与服务器能够交互(客户端发起请求,服务器返回响应)之前,必须在这两者间建立一个 TCP
链接,打开一个 TCP
连接需要多次往返交换消息(因此耗时)。HTTP/1.0
默认为每一对 HTTP
请求/响应都打开一个单独的 TCP
连接。当需要连续发起多个请求时,这种模式比多个请求共享同一个 TCP
链接更低效。
HTTP/1.1
引入了流水线(被证明难以实现)和持久连接的概念:底层的 TCP
连接可以通过 Connection
头部来被部分控制。HTTP/2 则发展得更远,通过在一个连接复用消息的方式来让这个连接始终保持为暖连接。