http存在的问题:

  1. 对头阻塞,当有多个TCP连接的时候,前面的请求没有处理完,后面的请求都得排队
  2. 对TCP连接有限制,需要多个TCP连接,浏览器对TCP连接有数量限制
  3. 请求投采用文本格式,有很多冗余
  4. 客户端主动请求

http2:

  1. 核心二进制分帧,http2采用二进制传输协议,采用二进制格式传输而不是文本格式
  2. 多路复用
    1. http2同一域名下的所有通讯都可以在一个TCP连接上完成,每个请求相当于一个流,二进制分帧可以在这些流上传输,再进行重组成一个完整的请求或者响应
  3. 头部压缩
    1. 1.x版本中,头部采用文本格式传输,浏览器会增加500-800字节得开销。2版本中对于相同首部字段,比如use-agent,cookie等,在第一次传输后,后面得请求都不会再传输,采用缓存
  4. 服务器推送
    1. 当一个请求完成之后,服务器可以主动推送其他资源给浏览器

Kepp-alive
keep-alive是解决http1不能建立长连接的机制。
需要在浏览器和服务器端设置Connection为Keep-alive状态,TCP连接就不会立马断开。
那怎么判断请求是否完成?

Transfer-Encoding和Content-Length

Content-length:是文本长度,当浏览器收到content-length长度的内容后就认为请求结束
transfer-encoding: 是把response分块,然后有个end chunk标志

RESTFUL:资源状态转移

通过Url来资源,通过HTTP动词来描述操作
我觉得通俗来讲就是:
通过url知道是请求什么资源,
通过HTTP的methods知道是什么操作
通过状态的返回知道结果如何