Squid Web Cache Wiki

Squid Web Cache 文档

🔗 功能:支持部分响应的缓存

🔗 详细信息

(来自 Bug 报告):当 range_offset_limit 设置为 -1 时,Squid 会尝试响应 HTTP Range 请求来获取整个对象。

对此的正确修复是添加部分响应的缓存,从而完全消除对 range_offset_limit 的需求。

🔗 提议 1:分块排序

Squid 应该将每个对象存储为一系列 N 字节的块。当请求一个 Range 时,应将包含这些字节的整个块获取到相关的块位置。

例如;在我的缓存中,我会以 1KB 的范围保存,这意味着一个 40KB 的文件将成为 40 个 1KB 的块。

假设我的文件名为 faysal.data

chunk0 = faysal.data,0-1KB
chunk1 = faysal,data,1-2KB
...

现在假设文件尚未缓存也未被请求,并且我请求一个 Range:bytes=2100-3000。

Squid 应该做的是:

  1. 跳过 1024-2048 块
  2. 获取 2049-3072 块
  3. 可选地跳过 3073+ 块,或继续获取。

缓存接收到的块,并将响应标记为不完整。

🔗 提议 2:稀疏缓存文件

Squid 应该为整个文件大小打开一个磁盘文件,并仅填充收到的字节。其余部分稍后可以通过后台请求加载。

注意:需要某种方法来映射已接收的文件字节,并考虑每个缓存对象文件中的可变长度元数据头。

🔗 提议 3:按 Range 缓存

Squid 使用额外的缓存键组件缓存 Vary 响应。Range 响应应该使用类似的机制缓存,修改 Range 的缓存键。

注意:需要逻辑来表示变体元条目中所有已存储 Range 的列表。Vary 缓存使用 X-Vary-Headers。Range 需要一个有效载荷。

更新:Store-ID 助手可能可用于跟踪哪些 URL 被不完整地存储,并处理键的修改。

分类: WantedFeature

导航:站点搜索站点页面类别🔼 向上