HTTP 0.9
HTTP0.9 只支持一种方法—— Get,请求只有一行。
HTTP 1.0
HTTP1.0 版本发布,大大丰富了 HTTP 的传输内容,除了文字,还可以发送图片、视频等,这为互联网的发展奠定了基础。
- 2.1 GET hello.html HTTP1.0
- 2.2 User-Agent:NCSA_Mosaic2.0(Windows3.1)
- 2.3 200 OK
- 2.4 Date: Tue, 15 Nov 1996 08:12:31 GMT
- 2.5 Server: CERN3.0 libwww2.17
- 2.6 Content-Type: texthtml
- 2.7 body
<HTML>
一个包含图片的页面
<IMGSRCIMGSRC="smile.gif">
<HTML>
HTTP 1.1
HTTP1.1 - 作为一个目前使用最广泛的协议版本
- 3.1 可以复用连接
- 3.2 增加 pipeline(只有幂等的请求可以使用 pipeline)
- 3.3 chunked 编码传输
- 3.4 etag,cache-control等缓存
- 3.5 引入内容协商机制,包括语言,编码,类型等
- 3.6 请求消息和响应消息都支持 Host 头域
- 3.7 新增了 OPTIONS,PUT, DELETE, TRACE, CONNECT 方法
缺点
- 在传输数据时,每次都要重新建立连接,对移动端特别不友好
- 传输内容是明文,不够安全
- header 内容过大,每次请求 header 变化不大,造成浪费
- keep-alive 给服务端带来性能压力
HTTPS
HTTPS 是以安全为目标的 HTTP 通道,在HTTP下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
- 4.1 一种是建立一个信息安全通道,保证数据传输的安全
- 4.2 另一种就是确认网站的真实性( ca 申请证书)
SPDY
SPDY - SPDY 并不是新的一种协议,而是在 HTTP 之前做了一层会话层
- 5.1 页面加载时间 (PLT) 减少 50%。
- 5.2 无需网站作者修改任何内容,将部署复杂性降至最低,无需变更网络基础设施
- 5.3 与开源社区合作开发这个新协议
- 5.4 收集真实性能数据,验证这个实验性协议是否有效
SPDY 引入了一个新的二进制分帧数据层,以实现多向请求和响应、优先次序、最小化及消除不必要的网络延迟,目的是更有效地利用底层 TCP 连接。
HTTP2
HTTP/2 于 2015 年标准化,主要目的是优化性能。其特性如下:
-
6.1 使用二进制分帧层
在应用层与传输层之间增加一个二进制分帧层,以此达到在不改动 HTTP 的语义,HTTP 方法、状态码、URI 及首部字段的情况下,突破HTTP1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量。 -
6.2 多路复用(Multiplexing)
对带宽的利用率不够,HTTP2.0 采用了多路复用的方式,可以并行发送多个请求,提高对带宽的利用率- 6.3 数据流优先级
-
在多路并发处理中,HTTP2.0 对数据流可以设置优先值,这个优先值决定了客户端和服务端处理不同的流采用不同的优先级策略。
-
取消某个正在传输的数据流(通过发送 RST_STREAM 帧),而不关闭 TCP 连接
tips-
它允许服务端将资源推送到客户端缓存,我们访问淘宝等网站时,经常会发现很多请求的请求头部分会提示“provisional headers are shown”,这通常就是直接从缓存加载了资源,因此请求根本没有被发送。观察 Chrome Network 的 Size 列,这种请求的该字段一般都是 from disk cache 或者 from memroy cache.
Chrome 可以通过 F2(开发工具)- Networ-Status选中(Protocol与Scheme)
image.png
-
从使用 Chrome 查看,目前主流网站基本都已经部分使用了 HTTP/2:
知乎、bilibili、GIthub 使用了 wss 协议。
也有很多网站使用了 SSE(格式如 data:image/png;base64,<base64 string>)
而且很多网站都有使用 HTTP/2 + QUIC,该协议的新名称是 HTTP/3,它是基于 UDP 的 HTTP 协议。
-
6.4 服务端推送
- 服务端推送在http1.x使采用websocket)
- 2.0直接由浏览器自动完成,该推送对 Web App 是隐藏的,由浏览器处理)
-
6.5 头部压缩
- HTTP/2 的消息头使用二进制格式,而非文本格式
- 使用专门设计的 HPack 算法压缩, 使用首部表来跟踪和存储之前发送的键值对,对于相同的内容,不会再每次请求和响应时发送。
HTTP/2.0 与 SPDY 不同的地方,主要有如下两:
- HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS。
- HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE。
网友评论