HTTP协议的发展历史
1.HTTP/0.9
- 只有一个GET命令
- 没有header等描述数据的信息 服务器发送完内容,就关闭TCP连接
- HTTP请求和TCP链接不是一个概念
- 一个TCP连接里面可以发送很多个HTTP连接
- 某个HTTP链接肯定是在某个TCP链接里面的
2.HTTP/1.0
- 增加了很多命令:post、put等
- 增加了status code和header的相关内容
- status code:用来描述服务端处理某一个请求之后的状态
- header:不管是发送还是请求的相关数据,它的描述以及我们对这数据是如何操作的方法
- 多字符集支持、多部分发送、权限、缓存等
3.HTTP/1.1
- 支持了持久连接
- 在HTTP1.0版本中一个HTTP请求就要在客户端和服务点之间创建一个TCP链接,在服务端返回内容之后,TCP链接就关闭了,因为每次建立一个HTTP链接要有一个三次握手(这部分是在TCP协议中做的,不需要关心细节,只需要知道这个过程消耗以及延迟都较高)
- 增加了pipeline
- 1.1版本中是可以在一个TCP链接中发送多个HTTP请求的
- 但是后端对于前端的请求是顺序处理然后内容返回的,如果前一个请求处理时间长,后一个请求处理很快,此时需要先等前面的请求处理完,再发送第二个请求(这个在2.0中有了优化)
- 增加了host和其它一些命令
- host:有了host以后可以在同一台物理服务器上同时跑不同的web服务。如跑一个node的服务和一个Java的服务
- 可以通过host字段表示我都是请求的这台物理服务器上的,但是请求的是不同的软件服务
- host:有了host以后可以在同一台物理服务器上同时跑不同的web服务。如跑一个node的服务和一个Java的服务
4.HTTP/2.0
- 所有数据以二进制传输(以前以字符串格式)
- 同一个连接里面发送给多个请求不再需要按照顺序来:
- 可以在返回第一个请求里面的数据的同时返回第二个请求里面的数据
- 头信息压缩以及推送等提高效率的功能
- 头信息压缩:
- HTTP1中,每次发送请求和返回请求中的头都是必须要完整的发送和返回的
- 但是这部分头信息中的很多内容,如头字段(如content-type,accept等)都是以字符串处理的,这样占的带宽的量比较大
- 2.0中的头信息压缩可以有效减少带宽
- 推送:HTTP请求只能是这边发送请求,服务端响应请求并返回内容。推送功能实现了服务端可以主动发起数据传输的。
- 如在请求HTML文本时可以主动把HTML需要用到的CSS和JS文件主动推动到客户端
- 这样的话HTML、css、JS部分的发送是并行的,而不是串行的
- 头信息压缩: