HTTP(超文本传输协议)
应用层协议,遵循客户端-服务端模型,用来传输HTML、图片、查询结果等数据(明文传输)。
- 特性
- 简单快速:HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 可扩展:通过HTTP headers扩展协议。
- 无状态、有会话:执行成功的请求之间没有关系,可通过cookies创建有状态会话。
- 无连接:每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
HTTP1.0
默认短连接,每次请求都需要建立一个TCP连接。
可通过
Connection: keep-alive开启长连接
HTTP1.1
默认长连接,一个TCP连接可以传输多个HTTP请求和响应。
客户端不用等待上一次请求结果即可发送下一次请求,但服务器必须依次返回响应。因此一个请求超时会造成堵塞。
相比HTTP1.0:
- 引入了更多的缓存控制策略,如If-Unmodified-Since, If-Match, If-None-Match等缓存头来控制缓存策略
- 引入range,允许值请求资源某个部分
- 引入host,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点
- 添加了put、delete、options等方法
HTTP2.0
相比之前版本新特性:
- 多路复用
- 二进制分帧
- 首部压缩
- 服务器推送
多路复用
一个连接里,客户端和浏览器可以同时发送多个请求和响应,且不用按照顺序一一对应,避免堵塞。
实现条件:数据流以消息形式发送,消息分成多个帧后乱序发送,根据帧首部的流标识可重新组装。
二进制分帧
HTTP2.0采用二进制格式传输数据,比HTTP1.x的文本格式解析更快。
将请求和响应数据分割为更小的帧,并且它们采用二进制编码。
首部压缩
在一个连接中,在客户端和服务器端使用首部表来跟踪和存储之前发送的首部键值对。
每次请求发送差异请求头即可。
服务器推送
服务器推送资源给客户端,适合加载静态资源。
例如客户端第一次请求html,服务器可将html包含资源一同返回。
HTTP请求响应格式
-
Request格式 包括请求头、请求行、空行、请求数据。
-
Response格式
HTTP状态码
HTTPS
经过SSL、TLS加密的HTTP协议(广大浏览器已不对SSL进行支持)