假设一个 UA 请求了我的 800kB 合并源代码文件,并缓存了它。假设我随后向该文件添加了一个新函数。
如何让 UA 仅获取添加的函数,并使用标准 HTTP 标头更新其缓存?我明确不希望 UA 重新下载完整的 800kB。
假设一个 UA 请求了我的 800kB 合并源代码文件,并缓存了它。假设我随后向该文件添加了一个新函数。
如何让 UA 仅获取添加的函数,并使用标准 HTTP 标头更新其缓存?我明确不希望 UA 重新下载完整的 800kB。
如果服务器和 UA 都在你的控制之下,你可以实现RFC 3229,它为此定义了一个协议。有关示例,请参见第 10.7.3 节。但是,请注意 RFC 3229 和RFC 7234(它所基于的)是很容易出错的复杂规范。
如果您希望与常见的 UA(不实现 RFC 3229)进行互操作,则没有直接的方法可以做您想做的事情。不过,您可以手动模拟。例如,如果有问题的“源代码文件”是一个 JavaScript 文件,那么您可以为新函数<script src>
添加另一个文件,而不是更改该文件。<script src>
如果您预计这样的更改会经常发生,您可以<script src>
从一开始就有两个:一个用于大型、不经常更新的基础,另一个用于频繁的小添加。另请参阅另一个最近的问题:使用浏览器缓存进行增量更新的解决方案
还要考虑其他减少网络流量的方法。使用Web 浏览器越来越支持的新Brotli算法进行压缩,比 gzip节省更多。如果您担心服务器端的带宽使用高峰,请尝试逐步向用户推出更新,这样他们就不会同时尝试获取整个文件。