-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
46 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
--- | ||
title: HTTP2 | ||
date: 2024-07-19 11:34:21 | ||
tags: 网络 | ||
code_block_shrink: false | ||
excerpt: HTTP2原理 | ||
--- | ||
## http1.1存在的问题 | ||
### 进步 | ||
1. 增加了持久链接 | ||
2. 浏览器为每个域名最多同步维护6个TCP持久链接 | ||
3. 使用CDN实现域名分片机制 // todo: 不知道是什么 需要看看 | ||
|
||
### 缺点 | ||
- 对带宽的利用率并不理想 | ||
原因: | ||
1. TCP慢启动,推迟了宝贵的首次渲染页面的时长。 | ||
|
||
- 同时开启了多条 TCP 连接,那么这些连接会竞争固定的带宽 | ||
- HTTP/1.1 队头阻塞的问题 | ||
原因: | ||
1. 在 HTTP/1.1 中使用持久连接时,虽然能公用一个 TCP 管道,但是在`一个管道中同一时刻只能处理一个请求`,在当前的请求没有结束之前,其他的请求只能处于阻塞状态。这意味着我们`不能随意在一个管道中发送请求和接收内容`。 | ||
|
||
## http2的解决方案 | ||
1. `一个域名使用一个TCP长连接来传输数据`,整个页面的资源下载过程只需要一次慢启动,同时避免来多个TCP长连接竞争带宽所带来的问题。 | ||
2. 多路复用,每个请求有一个对应的ID,浏览器接收到之后,会筛选出相同 ID 的内容,将其拼接为完整的 HTTP 响应数据 | ||
{% asset_img http2多路复用.png http2多路复用 %} | ||
|
||
|
||
## http2的多路复用 | ||
{% asset_img http2协议栈.png http2协议栈 %} | ||
|
||
|
||
http2添加了一个`二进制分帧层` | ||
|
||
### 过程 | ||
1. 浏览器准备好请求数据,包括`请求行,请求头`,POST请求,还有`请求体` | ||
2. 经过二进制分帧层,被转换为一个个带有`请求ID编号的帧`,通过协议栈将其发给服务器 | ||
3. 然后服务器处理该请求,并将处理的响应行、响应头和响应体分别发送至二进制分帧层 | ||
4. 二进制分帧层会将这些响应数据转换为一个个带有请求 ID 编号的帧,经过协议栈发送给浏览器 | ||
5. 浏览器接收到响应帧之后,会根据 ID 编号将帧的数据提交给对应的请求 | ||
|
||
## http2的其他特性 | ||
1. 可以设置请求的优先级,浏览器可以查看Priority优先级 | ||
2. 服务器推送,接收到HTML请求后,`附带将要使用的CSS文件和JS文件一并发送给浏览器`,[具体配置实现](https://www.ruanyifeng.com/blog/2018/03/http2_server_push.html) | ||
3. 头部压缩,打开network后可以看到很多`:authority`之类的请求头 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.