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

2020/06-01——HTTP 版本之间的区别 #7

Open
3 tasks done
HannibalKcc opened this issue Jun 4, 2020 · 0 comments
Open
3 tasks done

2020/06-01——HTTP 版本之间的区别 #7

HannibalKcc opened this issue Jun 4, 2020 · 0 comments

Comments

@HannibalKcc
Copy link
Owner

HannibalKcc commented Jun 4, 2020

查看http协议版本,在 chrome->devtool->network 中,对 Name 一列右键,选择 protocol 即可, h2 代表 http2.0

新的 vue-cli 中,默认打开了 prefetch 特性
prefetch

preload 不影响解析的情况下预加载资源
prefetch 属于闲时加载

需要注意的是,以上2个关键词,都不会执行内部的内容,只是加载而已。

参考

  • http1.1 的进步
  • http2 的进步
  • http3 的进步(截止2021/04并未真正投入)

参考2
参考3
参考4
参考5-1.1为什么不能多路复用

http1.1

  1. 更多的缓存策略
  2. 引入 range 头域,支持断点续传
  3. 持久化连接 这样就不必每次 tcp 请求发起3次握手了,关键词是 Connection: keep-alive

但是1.1的持久化连接也有改进空间,因为它要求 FIFO 的队列顺序,所以对一个连接上的(注意,这里是一个连接!多个连接之间没有这个要求)多个响应数据必须依次等待上一个响应数据返回后才开始传输。

http2.0

  1. http 请求并发是被允许的,雪碧图等小资源合并请求的年代可以过去了。(多路复用,相较于原有 http1.1 使用的纯文本传输, http2 改为2进制传输,有了帧跟流的概念,允许对同一个域名的请求都在一个 TCP 上完成)
  2. 请求首部不必每次连接携带,而是会被存储到一个表中(连接过程中存在)。
  3. 请求首部被压缩(注:常用的 GZIP 压缩是压缩报文内容)
  4. 允许设置请求优先级

缺点

但是 http2.0 并不是完美了,http2 请求本身支持了多路复用,会在一个 TCP 连接上使用多个 http 请求。但别忘了其是基于 TCP 的。在 TCP 协议上,其顺序传输要求:如果某个数据包丢失了,其他数据包必须等待。

如果在2%左右的丢包率的网络下,http2.0的性能反而会更差。而使用了 http1.1 会开启多个 TCP 连接,每个 TCP 开启一个 http 请求,即使是其中一个请求丢包了,也不会影响到其他 TCP 连接上的 http 请求。

http3 目前的设想

放弃 TCP 协议,转而使用 UDP(因为对接受包的顺序无要求),或者说基于 UDP 改良的 QUIC。

参考

TCP 阻塞
TCP 阻塞2

@HannibalKcc HannibalKcc changed the title 2020/06-01——网络资源加载 2020/06-01——HTTP HTTPS 网络资源加载 Apr 24, 2021
@HannibalKcc HannibalKcc changed the title 2020/06-01——HTTP HTTPS 网络资源加载 2020/06-01——HTTP 版本之间的区别 Apr 24, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant