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

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

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

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

最佳答案

如果服务器和UA都在你的控制之下,你可以实现RFC 3229 ,它为此定义了一个协议(protocol)。参见 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 .如果您担心服务器端的带宽使用量激增,请尝试逐步向用户推出更新,这样他们就不会同时尝试获取整个文件。

关于http - 为(可能)非常大的文本文件发送部分更新/添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279305/

相关文章:

无法让 HTTP POST 请求正常工作

linux - Libcurl支持多播文件传输吗?

ruby - 使用 Ruby 上传大文件

sql-server - 将包含超过 1024 列的 csv 文件导入到新的 SQL Server 表中

unix - 发送方和接收方应要求通过 ssh 传输文件?

phpstorm - 如何用PhpStorm 8打开大文件?

c# - 找不到 HttpServerChannel

javascript - Http Put 方法在带有 header 的 AngularJS 中不起作用

html - HTML 文件中 Cache-Control 元标记的范围

android - 通过蓝牙传输文件失败