加载笔记内容...
加载笔记内容...
CDN(Content Delivery Network,内容分发网络)是一种网络结构,其目的是通过在各地部署多个服务器节点,将网站或网络应用的内容更接近地提供给用户,以提高访问速度和可靠性。以下是CDN的主要作用:
总的来说,CDN通过将内容更近地分发给用户,不仅提高了内容的访问速度,还增强了网站的稳定性和安全性。
HTTP/2 引入了多项技术和优化,使得它可以更有效地处理并发的 HTTP 请求。相对于 HTTP/1.1,HTTP/2 在以下几个方面实现了并发的优化:
那么,为什么 HTTP/1.1 不支持这些功能呢?
HTTP/1.1 设计之初,并没有考虑到今天的 Web 的复杂性和大量资源的需求。当初的 Web 主要是文本为主,只有少量的图像和其他资源。随着时间的推移,Web 页面变得越来越复杂,需要加载的资源也越来越多,但 HTTP/1.1 的设计并没有适应这种变化。
在 HTTP/1.1 中,每个请求-响应周期都需要一个单独的 TCP 连接。为了实现并发,浏览器会开启多个并行的 TCP 连接到同一服务器,但这种方法有其限制,并且可能会对服务器和网络造成不必要的压力。
总的来说,HTTP/2 引入了多项技术和优化,使得它可以更有效地处理并发的 HTTP 请求,而 HTTP/1.1 在设计时并没有考虑到如今 Web 的复杂性和并发需求。
Service Workers 是 Web 平台上的强大特性,用于支持离线体验、消息推送和网络代理等功能。关于 Service Workers 使用 HTTP/1.1 而不是 HTTP/2 的观点,需要考虑以下几个方面:
综上所述,Service Workers 本身并不决定 HTTP 请求的版本。当我们看到 Service Worker 的请求显示为 HTTP/1.1,这可能是因为工具的显示方式、缓存行为或其他原因,而不是 Service Worker 强制使用 HTTP/1.1。在支持 HTTP/2 的环境中,Service Worker 拦截的请求完全可以利用 HTTP/2 的优点。
HTTP/2 引入了一个流优先级概念,该概念允许客户端向服务器提供关于如何最好地处理多个并行请求的建议。通过正确地设置优先级,客户端可以确保最重要的资源首先被传输,从而加快页面的渲染速度。
以下是 HTTP/2 请求优先级的主要概念:
流(Stream):
在 HTTP/2 中,一个连接上的所有通信都被分解成小块并在多个流中发送。每个流都有一个唯一的整数标识符。
权重(Weight):
每个流都有一个权重,该权重是介于 1 和 256 之间的整数。权重决定了与其他流的相对重要性。例如,一个权重为 200 的流有比权重为 100 的流双倍的优先级。
依赖关系(Dependency):
一个流可以被设置为依赖另一个流。这意味着,除非父流已完成,否则当前流(子流)不应该开始。这样,你可以表达资源之间的关系,例如:CSS 应该在 JS 之前加载。
独占标志(Exclusive Flag):
如果设置了这个标志,它表示当前流应该独占其父流的所有其他依赖关系。这是一个控制优先级的方法。
大多数时候,浏览器会为你处理优先级,并为关键请求(例如视窗内的资源)设置更高的优先级。然而,如果你在编写服务器代码或客户端库,并想要手动设置优先级,你需要使用库或工具的特定 API 来设置权重和依赖关系。
当有大量的并行请求时,知道哪个请求最重要就变得至关重要。例如,对于一个网页来说,首屏的 CSS 和关键的 JS 比较重要,因为它们可以阻止页面的渲染。通过设置正确的优先级,你可以确保关键资源先被加载和处理,从而提高性能。
并不是所有的服务器和中间设备都会完全遵循客户端的优先级建议。优先级在 HTTP/2 中是一个建议性的机制,而不是强制性的。
总之,HTTP/2 的请求优先级是一个强大的工具,可以用来优化网页的加载速度和性能,但它需要与服务器、CDNs 和其他中间设备一起正确地工作。
最近在互联网大善人加新学到了一个叫 br 的 Content-Encoding。然后问了下 ChatGPT。
Content-Encoding
头部在HTTP中表示应用于实体主体的内容编码转换(通常是压缩)。以下是一些常见的Content-Encoding
值:
identity
gzip (GNU zip)
deflate
br (Brotli)
compress
sdch (Shared Dictionary Compression over HTTP)
以上是最常见的Content-Encoding
值。但理论上,其他编码算法也可以被定义和使用,只要客户端和服务器都进行了相应的支持。
Brotli 是一种通用的无损数据压缩算法,它是由 Google 的 Jyrki Alakuijala 和 Zoltán Szabadka 开发的。这个算法是为 HTTP 内容编码设计的,并在 Chromium、Firefox、Edge 和其他一些主流浏览器中得到了实现。Brotli 在大多数情况下相较于 gzip 提供了更好的压缩率。
Brotli 算法的原理包括以下几个关键技术:
相较于 gzip,Brotli 的主要提升包括:
总的来说,Brotli 是一个在大多数情况下比 gzip 更高效的压缩算法,但它需要更多的资源来实现最高的压缩率。在选择使用哪种算法时,通常需要权衡压缩率、压缩速度和资源消耗之间的关系。