1

假设一个 UA 请求了我的 800kB 合并源代码文件,并缓存了它。假设我随后向该文件添加了一个新函数。

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

4

1 回答 1

1

如果服务器和 UA 都在你的控制之下,你可以实现RFC 3229,它为此定义了一个协议。有关示例,请参见第 10.7.3 节。但是,请注意 RFC 3229 和RFC 7234(它所基于的)是很容易出错的复杂规范。

如果您希望与常见的 UA(不实现 RFC 3229)进行互操作,则没有直接的方法可以做您想做的事情。不过,您可以手动模拟。例如,如果有问题的“源代码文件”是一个 JavaScript 文件,那么您可以为新函数<script src>添加另一个文件,而不是更改该文件。<script src>如果您预计这样的更改会经常发生,您可以<script src>从一开始就有两个:一个用于大型、不经常更新的基础,另一个用于频繁的小添加。另请参阅另一个最近的问题:使用浏览器缓存进行增量更新的解决方案

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

于 2018-05-12T11:34:00.660 回答