Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP 1.1 和 2.0 区别 #11

Open
Douc1998 opened this issue Mar 13, 2023 · 0 comments
Open

HTTP 1.1 和 2.0 区别 #11

Douc1998 opened this issue Mar 13, 2023 · 0 comments
Labels

Comments

@Douc1998
Copy link
Owner

Douc1998 commented Mar 13, 2023

HTTP 1.1

HTTP 1.1 的新特性有:

  1. 默认持久连接
    只要客户端和服务端任意一端没有明确提出断开 TCP 连接,就会一直保持连接,并且在这个过程中可以发送多次 HTTP 请求。HTTP 1.0 默认使用短连接,而 HTTP 1.1 默认使用长连接。

  2. 管线化
    客户端可以同时发送多个 HTTP 请求,不用等待响应。

  3. 断点续传
    利用 HTTP 消息头(Range 和 Content-Range)使用分块传输编码,将实体主体进行分块传输。

  4. 缓存策略
    在HTTP1.0中主要使用header里的 Expires, Last-Modified / If-Modified-Since来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如:cache-control, ETag / If-None-Match等更多可供选择的缓存头来控制缓存策略。

HTTP 2.0

HTTP 2.0 的新特性有:

  1. 二进制格式传输
    HTTP 1.x 的解析都是基于文本,而 HTTP 2.0 采用二进制格式,实现了效率更高的传输。

  2. 并发传输
    HTTP 1.1 基于请求-响应模型,同一个连接中, HTTP 完成一个事务(请求与响应),才能处理下一个事务。在发出请求等待响应的过程中是没办法做其他事情的,这会造成队头阻塞问题 。
    HTTP2 通过 Stream(流)设计,多个 Stream 复用一条 TCP 连接,达到了并发的效果。(实际上就是一个请求对应了一个 ID,一个 TCP 连接可以有多个请求,接收方根据请求的 ID 将请求归属到不同的服务端请求中)

  3. 压缩头部
    HTTP 1.1 报文的 Header 部分含有很多固定字段,且很多字段值是重复的。因此 HTTP 2.0 采用 HPACK 算法(包括静态字典、动态字典、哈夫曼编码)对头部进行压缩,降低头部占用空间大小,提高传输效率。

  4. 服务器主动推送资源
    HTTP 1.1 不支持服务器主动推送资源给客户端,都是客户端发起请求之后,才能获取到服务器响应的资源。在 HTTP 2.0 中,客户端访问 HTML 时,服务器可以主动推送 CSS 文件,减少了消息传递的次数。

  5. 永久性
    HTTP 2.0 中只要客户端和某个服务器完成连接,将具有永久性,之后如果再次需要和该服务器进行连接时,可以直接复用,不需要再次建立连接。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant