万维网的发明 - 在TCP 和IP 协议的基础上, 有四个组成部分

超文本标记语言(HTML), 表示超文本文档

超文本传输协议(HTTP), 传输HTML

浏览器, 显示\编辑HTML

服务器, 提供HTML

HTTP/0.9

1990年

最初这版并没有定义版本号, 为了和后来者区分, 增加了版本号(谥shi号, hhhhh)

只有GET 方法, 请求时不用标注协议域名端口, 响应时只有HTML

GET /mypage.html
<HTML>
...
</HTML>

HTTP/1.0

1996, 把多年的尝试归纳为HTTP/1.0, 但它是狭义的, 并不是官方标准

增加了headers 的概念

可以定义文件类型, 即支持了HTML 以外的文件传输

这使得HTTP 有了可扩展性

请求时需要HTTP 版本号

响应时有了状态码

GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML> 
	HTML TEXT
  <IMG SRC="/myimage.gif">
</HTML>

HTTP/1.1

1997, 修正HTTP/1.0 中的歧义, 标准化版本

另引入多项改进

复用连接

并发请求

分段请求(一次只请求资源的一部分)

更多缓存机制

内容协商机制(自然语言\文件编码\文件类型等)

对HTTP 的扩展

HTTP/2.0

由文本协议变成二进制协议

复用, 解决之前顺序执行和阻塞的约束

多个请求在一个连接中进行

多个连接合并为一个

压缩headers, 多个请求的headers 去重

服务端把所有资源主动推送到浏览器

不用等待浏览器解析DOM 后发现需要外链资源

甚至不用提前发送headers 告诉浏览器需要加载哪些依赖的资源

先推送到浏览器, 浏览器未解析headers\DOM 前就把资源缓存起来

解析后直接从缓存中取数据 Σ(っ °Д °;)っ

强制使用TLS

虽然规范工作组仍在争议强制是否好, 但是各浏览器只实现了加密版, 成为事实的标准

HTTP/2 帧机制是在 HTTP/1.x 语法和底层传输协议之间增加了一个新的中间层,而没有从根本上修改它, 这使得过渡升级变得非常容易.

参考

WebSockets vs. Server-Sent events/EventSource

https://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource

Server-sent events

https://en.wikipedia.org/wiki/Server-sent_events

https://zh.wikipedia.org/wiki/HTTP/2