为(可能)非常大的文本文件发送部分更新/添加

时间:2018-05-10 18:27:59

标签: http file-transfer large-files network-efficiency

让我们说UA已经请求我的800kB合并源代码文件并缓存它。让我们说我然后在该文件中添加了一个新功能。

如何使用标准HTTP标头让UA仅获取添加的功能并更新其缓存?我明确地不希望UA重新下载完整的800kB。

1 个答案:

答案 0 :(得分:1)

如果服务器和UA都在您的控制之下,您可以实现RFC 3229,它为此定义协议。有关示例,请参阅Section 10.7.3。但是,请注意RFC 3229和RFC 7234(它所基于的)是easy to get wrong的复杂规范。

如果您希望与公共UA(不实施RFC 3229)进行互操作,则没有直接的方法可以执行您想要的操作。不过,你可以手工模仿。例如,如果有问题的“源代码文件”是<script src>的JavaScript文件,那么您可以为新功能添加另一个<script src>,而不是更改该文件。如果你预计这种变化经常发生,你可以从一开始就有两个<script src>:一个用于大的,不经常更新的基础,另一个用于频繁的小添加。另请参阅最近的另一个问题:A solution idea for incremental updates using browser cache

还要考虑其他减少网络流量的方法。使用新的Brotli算法进行压缩,Web浏览器越来越多地支持该算法,从而节省slightly more than gzip。如果您担心服务器端带宽使用率的高峰,请尝试逐步向用户推出更新,这样他们就不会同时尝试获取整个文件。