万维网的发明 - 在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