《诗》有之:‘高山仰止,景行行止。虽不能至,然心向往之。 - 司马迁
RichTalk 是我们团队每 2 周一次的技术分享活动,前 5 分钟分享最近 2 周社区动态,接着一场技术分享
头条
RFC 9114 HTTP/3
www.rfc-editor.org/rfc/rfc9114… 6 月 IETF QUIC 和 HTTP 工作组成员 Robin Marx 宣布,经过 5 年的努力,HTTP/3 被标准化为 RFC 9114,这是 HTTP 超文本传输协议的第三个主要版本。
http/1.0 | 在HTTP/1.0中,客户端和服务器之间的每次请求/响应交换都会创建一个新的 TCP 连接,这意味着在每个请求之前 TCP 和 TLS 都要完成握手,所有请求都会产生延迟。在网络层上获得并发的唯一方法是并行使用多个 TCP 连接到同一源。 |
---|---|
http/1.1 | 引入“keep-alive”连接的概念来解决重复建立 TCP 连接的问题,该概念允许客户端重用 TCP连接,从而分摊建立初始连接的成本和跨多个请求的缓慢启动。 |
http/2.0 | SPDY 出现,首次引入了 HTTP “流”的概念:这是一种抽象的概念,允许 HTTP 实现在同一个 TCP 连接上并发地复用不同的 HTTP 交换,允许浏览器更有效地重用 TCP 连接。HTTP/2 在单独的流上隔离不同的 HTTP 交换。 |
http/3.0 | 不使用 TCP 作为会话的传输层,而是使用 QUIC(一种新的Internet传输协议)。QUIC 流共享相同的 QUIC 连接,因此不需要额外的握手和慢启动来创建新的 QUIC 流,但 QUIC 流是独立交付的,因为 QUIC 数据包被封装在 UDP 数据报头的顶部,所以在大多数情况下,包丢失只影响一个流而不影响其他流。 |
假设我们使用 HTTP/1.0 获取一张图片。首先我们需要建立一个连接,然后发送请求,等待服务器处理这个请求,然后接收响应包。如果我们想在第一个资源返回响应之前获取另外一个资源,我们又要经历同样的阶段:建立连接、发送请求、等待处理、接收响应。从图中可以看出,大部分时间花费在连接建立阶段。 HTTP/1.1 通过连接复用,新的请求直接复用前一个连接,减少了连接建立的耗时,但只有在前一个响应结束后才能发送下一个请求,这被称为队头阻塞。在过去,HTTP 实现使用许多并行连接来克服这个问题。应用程序甚至可以配置并行 HTTP 连接的数量。然而这导致客户端和服务器的网络行为效率低下。
HTTP/2 通过在单个连接上多路复用多个流来解决队头阻塞问题。请求可以更早发送,来自不同流的数据也可以交错。这允许更有效地使用单个 TCP 连接,因为空闲等待时间大大减少。
HTTP/3 接建立的速度要比 HTPP/2 更快,因此请求可以更快地发出。
HTTP/3 的流是独立的,这与 HTTP/2 不同,所有流共享一个 TCP 连接。
在大多数网络上,数据包会丢失。这是无线网络上的正常事件,也是检测网络容量的自然组成部分。在 HTTP/2 中,丢包可能会影响许多流,因为所有 HTTP/2 流共享一个 TCP 连接。 在 HTTP/3 中,只有相关的 HTTP 流受到影响,属于其他流的数据不受影响。 HTTP/2:
HTTP/3:
HTTP/3 拥有更快的连接建立速度以及更出色的丢包处理能力,这些改进是由底层的传输协议 QUIC 实现。
QUIC 是一种全新的可靠传输协议,已被 IETF(Internet Engineering Task Force ,互联网工程任务组)标准化。它基于与TCP的相同概念,但提供了端到端加密、多路复用流、身份验证功能。 QUIC安全性是建立在TLS 1.3之上的。QUIC依靠TLS 1.3来执行安全握手,不需要像TCP那样三次握手,QUIC将握手时间减少到单次往返。
QUIC 的多路复用流不会受到队头阻塞的影响。一个QUIC端点能够将它收到的数据包信息传递给另一个端点,并且不受 TCP 限制的影响,因此 QUIC 具有更出色的丢包恢复能力。
QUIC 还支持连接迁移,允许连接在不同网络接口之间无缝移动,且无需重新建立会话,例如在蜂窝网和 Wi-Fi 之间切换。
更多详情阅读 RFC 原文。
扩展阅读:
精选
The State of Serverless 2022
www.datadoghq.com/state-of-se…
- 在云上运营的组织超过一半采用了 serverless
- Python 和 Node.js 在 Lambda 用户中仍然占主导地位
- 超过 60% 的大型组织已经部署了至少三种语言的 Lambda 函数
- API Gateway 和 SQS 是最常调用 Lambda 函数的 AWS 技术
- 来自 API Gateway 的 80% 的 Lambda 调用是针对单一用途的函数
- 五分之一的 Lambda 用户将函数部署为容器镜像
- 超过 20% 的 Lambda 客户也在使用 ECS Fargate
- Google Cloud Run 是在 Google Cloud 中部署 serverless 应用程序增长最快的方法
- Azure Functions 是 Azure 最受欢迎的 serverless 产品,但 Azure 容器实例的采用正在快速增长
你不知道的 HTML 属性
www.smashingmagazine.com/2022/03/htm… 一些有趣的 HTML 属性,您可能听说过也可能没有听说过,如果觉得这些属性有用,可以在您的项目中尝试使用。
- 虚拟键盘的 enterkeyhint 属性
<input type="text" enterkeyhint="done">
复制代码
enterkeyhint
接受七个可能的值,这些值将替换“enter”键上的文本
- enter,
- done,
- go,
- next,
- previous,
- search,
- send.
- 样式表上的
**title**
属性
<link href="main.css" rel="stylesheet" title="Default">
<link href="contrast.css" rel="alternate stylesheet" title="High Contrast">
<link href="readable.css" rel="alternate stylesheet" title="Readable">
复制代码
Firefox 有一个选项可让您选择查看页面时要使用的样式表。
元素的
**decoding**
属性
<img src="/images/example.png" alt="Example" decoding="async">
复制代码
取值:
sync
:同步解码图像。async
:异步解码图像以避免延迟其他内容的呈现。auto
:默认允许浏览器使用自己的内置解码方法。
扩展阅读: