通过HTTP发送大量数据的三种方法
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
在网络的早期时期,人们发送的文件大小仅为几KB。到了2023年,我们享受着高分辨率的MB级别图像,并在几GB的4K(即将是8K)视频中观看。 即使有良好的互联网连接,下载一个5GB的文件仍然需要一些时间。如果你拥有Xbox或PlayStation,你就知道这种感觉。 我们有三种方法可以通过HTTP缩短发送大量数据的时间: •压缩数据•发送分块数据•请求选择范围内的数据 它们并不是互斥的。你可以根据用例一起使用所有方法。 压缩数据要压缩数据,我们需要压缩算法。 在发送请求时,浏览器会包含一个名为 接下来,服务器从列表中选择其支持的算法,并在 当浏览器接收到响应时,它知道如何解析正文中的数据。 在这些算法中,最流行的是GZIP。它是压缩文本数据(如HTML、CSS和Javascript)的绝佳选择。 Brotli是另一个值得一提的算法。它在压缩HTML方面的性能甚至比GZIP更好。 这些高效的算法有一些限制。 它们对文本的压缩效果很好,但对于压缩图像或视频来说则不足够。毕竟,媒体已经过了优化。 试着在你的计算机上压缩一个视频文件。在压缩之前和之后,你几乎看不到太大的区别。 此外,几乎不可能将一个5GB的视频压缩到几KB而不损失质量。 压缩是好的,但我们需要一个更好的解决方案——将文件分块发送并在客户端组装部分数据。 发送分块数据在版本1.1中,HTTP引入了分块数据以处理大数据情况。 在发送响应时,服务器添加一个头 每个分块数据都有以下组件: •一个长度块标记,标记当前分块数据的长度•分块数据块•在每个块的末尾的CRLF分隔符 想知道CRLF是什么吗?
服务器继续向浏览器流式传输分块数据。当达到数据流的末尾时,它附加一个包含以下部分的结束标记: •一个长度块,数字为 在浏览器端,它等待所有数据块,直到达到结束标记。然后,它移除分块编码,包括CRLF和长度信息。 接下来,它将分块数据组合成一个整体。因此,在Chrome DevTools上,你只能看到组装后的数据,而不是分块数据。 最终,你会收到整个数据的一块。 分块数据是有用的。然而,对于一个5GB的视频,完整的数据仍然需要一些时间才能到达。 我们能不能获取数据的选定块,并在需要时请求其他块呢? HTTP说可以。 在选定范围内请求数据在YouTube上打开一个视频,你会看到一个灰色的进度条正在向前移动。 你刚刚看到的是YouTube在请求选定范围内的数据。 此功能使你可以在时间轴的任何地方跳跃。当点击进度条上的某个位置时,浏览器会请求视频数据的特定范围。 在服务器上实现范围请求是可选的。如果实现了,你可以在响应头中看到 这是一个YouTube请求的示例。在任何“playback”请求中,你都可以找到这个头。 范围请求头看起来像`Range: bytes=0-80`,它是从0开始的索引。 这个头是一个设计非常巧妙且具有出色灵活性的头。 假设一个数据总共有100个字节。 • 如果请求的范围有效,服务器将发送带有 范围请求广泛用于视频流媒体和文件下载服务。 你有没有在互联网中断后继续文件下载?那就是范围请求。 此外,范围请求支持多个范围。 例如,你可以从文件中请求两个范围,如 多范围体看起来类似于分块数据。每个数据块都有以下部分: •一个边界块,标识不同数据块的边界,以 边界仅仅是一个看起来像 最终,体结束于边界块,以 让我们把它全部整合起来。响应体的结构如下所示。 总结HTTP帮助我们通过压缩、分块数据和范围数据传送大量数据。 这里的思想是在需要的时候传送我们需要的数据,然后在需要时发送其他数据。当在设计类似系统时遇到问题时,你可以尝试相同的思路。 通过结合这三种方法,我们可以发送压缩的分块数据范围数据。 该文章在 2023/10/16 9:30:14 编辑过 |
关键字查询
相关文章
正在查询... |