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

HTTP1.0、HTTP1.1、HTTP2.0的区别? #22

Open
GGXXMM opened this issue Aug 11, 2019 · 0 comments
Open

HTTP1.0、HTTP1.1、HTTP2.0的区别? #22

GGXXMM opened this issue Aug 11, 2019 · 0 comments
Labels

Comments

@GGXXMM
Copy link
Owner

GGXXMM commented Aug 11, 2019

HTTP1.0

HTTP1.0最早在网页使用是1996年,那时候只是使用较为简单的网络请求。有如下缺陷:
1、无法复用连接,完成即断开。(非持久连接)
2、heead of line blocking:线头阻塞,导致请求之间互相影响。

HTTP1.1

HTTP1.1则在1999年开始广泛应用于现在的各大浏览器网络请求,同时也是当前使用最广泛的HTTP协议。和HTTP1.0相比,有了如下改进:
1、长连接(默认开启Connection:keep-alive)
2、host头处理。随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且他们共享一个ip地址。HTTP1.1的请求消息和响应消息都应支持host头域,且请求消息中如果没有host头域会报告一个错误(400 Bad Request)。
3、缓存处理

  • Cache-Control
  • Expires
  • Last-Modified
  • Etag

4、带宽优化及网络连接的使用:HTTP1.0存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传的功能;在HTTP1.1则在请求头引入了range头域,它只允许请求资源的某个部分,即返回码是206(Partial Content),这样就充分利用带宽和连接。
5、错误通知的管理:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

HTTP2.0

1、多路复用:即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
2、二进制格式:HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
3、首部压缩:HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
4、服务端推送(server push):例如网页有一个style.css的请求,在客户端收到style.css数据的同时,服务器端会将style.js的文件推送给客户端,当客户端再次尝试获取style.js时,就可以直接从缓存中获取,不用再发起请求了。

参考:https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A

@GGXXMM GGXXMM added the 网络 label Dec 7, 2021
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