Squid Web Cache Wiki

Squid Web Cache 文档

🔗 功能:HTTP/1.1 支持

🔗 摘要

Squid-3.2 声称支持 HTTP/1.1。Squid v3.1 声称支持 HTTP/1.1,但仅限于发送请求(从 Squid 到服务器)。

早期的 Squid 版本默认不声明支持 HTTP/1.1,因为它们无法完全处理 Expect:100-continue、1xx 响应和/或分块消息。

Co-Advisor 测试不再检测到 Squid 主干中与缓存无关的要求方面的 RFC MUST 级别违规。许多与缓存相关 Requirements 仍然被违反。“项目头部的合规性百分比”本质上是一个营销噱头(即,无意义或误导但技术上正确的信息)。我们正在积极努力修复 Co-Advisor 检测到的所有已知违规项。

🔗 清单

截至 2018 年 8 月,Squid v4+ 符合 RFC MUST 级要求:HTTP-1.1-Checklist_2018-08-09.ods

2013 年 8 月收集的 Squid v3 和 v2 结果:HTTP-1.1-Checklist_2013-08-21.ods

链接的文档包含多个 Squid 版本自动 Co-Advisor HTTP/1.1 合规性测试结果。每个测试包含近 900 个单独的测试用例,针对 RFC 2616 和 7230-7235 中的各种 MUST 要求。每个 Squid v3+ 列汇总了多项测试的结果。从 HTTP 角度来看,这些测试是相同的。如果在这些测试期间某个测试用例显示了不同的结果,则无法确定确切的测试用例结果。此类结果用字母 ‘U’ 标记。所有其他标记都对应于稳定的结果。一些测试用例由于 Squid 缺乏 HTTP/1.1 功能支持、与测试套件不兼容、测试套件错误或其他原因而失败。此类测试用例用问号标记。其余的测试用例结果是成功和违规。只有成功的结果计入“测试用例通过”百分比。

这些测试是在未经任何特殊修改的原版 Squid 上进行的。2.7 的测试似乎是在启用了可配置的 HTTP/1.1 服务器广告的情况下进行的。

🔗 合规性

以下合规性说明适用于 Squid-3.2 及更高版本。旧版 Squid 甚至没有有条件地遵守 HTTP/1.1。

🔗 消息语法和路由

规范文档:RFC 7230

  1. HTTP/1.1 要求我们将版本升级到我们支持的最高版本。这在与某些损坏的客户端和服务器交互时被发现存在问题。
    • NP:ICY 协议似乎是主要问题。因此,已原生实现 ICY 支持以解决此问题。
    • NP:Sharepoint 和其他几个 MS 产品在服务器和客户端之间广告不同的 HTTP/1.x 版本时(如 Squid-3.1 所见)会出现身份验证循环错误。这已通过 Squid-3.2 在服务器和客户端两端都广告 HTTP/1.1 来解决。
  2. HTTP/1.1 要求在解析器和组合器中都支持分块编码。这适用于响应和请求。
    • Squid-3 和 Squid-2 都至少包含响应分块解码。从 Squid-3.2 开始,除 CONNECT 请求外,所有流量都提供分块编码功能。
    • Squid 缺少对分块编码尾部的支持。
    • Squid 缺少对 deflate 和 gzip 传输编码的支持。
    • Squid 缺少对 HTTP 消息尾部的支持。

规范文档:RFC 2817

  1. Squid 有条件地符合此功能。始终忽略标头内容,并确保 **Upgrade** 标头被安全丢弃。
  2. 启用 ssl-bump 功能的 Squid 将尝试升级 CONNECT 请求到 TLS,无论 Upgrade 标头是否存在。

🔗 语义和内容

规范文档:RFC 7231

  1. 需要清理转发路径,以更好地分离 HTTP 消息和实际内容,从而允许正确转发 1xx 响应。1xx 转发已在 Squid-3.2 中实现,但转发路径仍需进一步完善以提高效率。
    • 这很可能会触及 store API,因为今天所有消息即使只是中间的 1xx 响应,都会通过 store。

规范文档:RFC 7238

🔗 条件请求

规范文档:RFC 7232

🔗 范围请求

规范文档:RFC 7233

🔗 缓存

规范文档:RFC 7234

🔗 认证

规范文档:RFC 7235

规范文档:RFC 2617

规范文档:RFC 4559

类别:功能,所需功能

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