应用层协议协商 (ALPN)
Posted: Wed Dec 11, 2024 7:23 am
应用层协议协商 (ALPN) 是 TLS 协议的扩展,允许客户端和服务器协商使用哪种协议,而无需不必要的往返。使用 ALPN,客户端会发送按偏好排序的可接受协议列表,服务器会以其选择进行响应。HTTP/2 协议使用应用层协议协商 (ALPN)。Squarespace 的服务器支持 HTTP/2 和 HTTP/1.1 协议。
HTTP/1.1 解决方法
在 HTTP/1.1 中,开发人员尝试通过域分片、文件串联、图像精灵和资产内联等技术来提高页面加载速度。HTTP/2 使其中一些优化方法变得过时。
域分片:域分片会导致执行额外的 DNS 查询、建立额外的 TCP 连接和(可能)TLS 握手。它还会使流优先级的好处失效。在 HTTP/2 中,多路复用流允许通过单个连接并行获取多个资产,从而实现相同的结果。
文件串联和图像精灵:串联的 CSS、JavaScript 或图像 萨尔瓦多 whatsapp 电话号码列表 精灵中的信息可能不会被您网站上的所有页面使用。因此,在首次加载期间会不必要地下载数据。此外,对串联文件进行微小编辑会导致整个文件的缓存失效。在 HTTP/2 中,将频繁更新的资产与更静态的资产分开可提高缓存性能。
内联资产:将 CSS 或 JavaScript 嵌入 HTML 页面会使流优先级的优势失效。此外,如果嵌入代码在 HTML 页面中大量使用,则将不必要地通过网络发送更多数据。在 HTTP/2 中,可以使用服务器推送来实现相同的结果。
HTTP/2 实际应用
我们的边缘基础设施团队构建了一个代号为 Echo 的反向代理和负载均衡器, 负责路由所有 Squarespace 流量。它用 Java 8 编写,由Netty提供支持。Netty 是一个异步的、事件驱动的框架,用于开发高性能、低延迟的网络应用程序。它内置了对许多协议的支持,例如 HTTP/1.1 和 HTTP/2。它还通过易于使用且一致的 API 公开了一些低级本机功能,例如 通过 OpenSSL/BoringSSL/LibreSSL 提供的 TLS 支持、 Linux 上的epoll支持以及BSD 上的kqueue 支持(即将推出)。该框架为常见问题(例如 SOCKS 和 Web 代理)提供了一些端到端解决方案,但当用作创建负载均衡器之类的工具箱时,它才真正大放异彩。
HTTP/1.1 解决方法
在 HTTP/1.1 中,开发人员尝试通过域分片、文件串联、图像精灵和资产内联等技术来提高页面加载速度。HTTP/2 使其中一些优化方法变得过时。
域分片:域分片会导致执行额外的 DNS 查询、建立额外的 TCP 连接和(可能)TLS 握手。它还会使流优先级的好处失效。在 HTTP/2 中,多路复用流允许通过单个连接并行获取多个资产,从而实现相同的结果。
文件串联和图像精灵:串联的 CSS、JavaScript 或图像 萨尔瓦多 whatsapp 电话号码列表 精灵中的信息可能不会被您网站上的所有页面使用。因此,在首次加载期间会不必要地下载数据。此外,对串联文件进行微小编辑会导致整个文件的缓存失效。在 HTTP/2 中,将频繁更新的资产与更静态的资产分开可提高缓存性能。
内联资产:将 CSS 或 JavaScript 嵌入 HTML 页面会使流优先级的优势失效。此外,如果嵌入代码在 HTML 页面中大量使用,则将不必要地通过网络发送更多数据。在 HTTP/2 中,可以使用服务器推送来实现相同的结果。
HTTP/2 实际应用
我们的边缘基础设施团队构建了一个代号为 Echo 的反向代理和负载均衡器, 负责路由所有 Squarespace 流量。它用 Java 8 编写,由Netty提供支持。Netty 是一个异步的、事件驱动的框架,用于开发高性能、低延迟的网络应用程序。它内置了对许多协议的支持,例如 HTTP/1.1 和 HTTP/2。它还通过易于使用且一致的 API 公开了一些低级本机功能,例如 通过 OpenSSL/BoringSSL/LibreSSL 提供的 TLS 支持、 Linux 上的epoll支持以及BSD 上的kqueue 支持(即将推出)。该框架为常见问题(例如 SOCKS 和 Web 代理)提供了一些端到端解决方案,但当用作创建负载均衡器之类的工具箱时,它才真正大放异彩。