![Apache 缓存提供部分内容,对完整内容的请求有 206 个响应](https://linux22.com/image/560433/Apache%20%E7%BC%93%E5%AD%98%E6%8F%90%E4%BE%9B%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9%EF%BC%8C%E5%AF%B9%E5%AE%8C%E6%95%B4%E5%86%85%E5%AE%B9%E7%9A%84%E8%AF%B7%E6%B1%82%E6%9C%89%20206%20%E4%B8%AA%E5%93%8D%E5%BA%94.png)
我们在带有 mod_cache 的 Apache 2.2.19 后面运行 Plone 3.3.6。我们最近注意到,Apache 正在缓存对范围请求的 206 响应,然后在发出完整资源请求时提供该部分响应。
似乎发生了以下事情:
- 某些客户端对尚未在缓存中或已在缓存中但已过期的资源发出范围请求
- Apache 正确提供 206 响应
- 另一个客户端对同一资源发出标准请求
- Apache 对第二个客户端提供相同的 206 响应:它应该使用 200 提供整个响应
这偶尔会导致某些网站的 CSS 出现问题
我可以始终如一地复制这一点:我编写了一个小型 Python 脚本来发出范围请求。
我认为我们的 Apache 配置并没有发生任何异常。我们使用反向代理配置来提供来自 Plone 的页面。与 mod_cache 相关的 Apache 配置如下:
CacheEnable disk /
CacheDisable /static
CacheDisable /sitemap.xml.gz
CacheDisable /robots.txt
CacheIgnoreHeaders Set-Cookie
UseCanonicalName On
RequestHeader edit Accept-Encoding ^.*gzip.*$ gzip early
RequestHeader edit Accept-Encoding ^(?!gzip).*$ "" early
这Apache 缓存指南未在缓存响应“必须具有”的状态代码列表中包含 206 个响应。这是 Apache 中的错误还是我们在配置中做了一些错误?
答案1
这是Apache 错误 49113并且已经固定在后备箱但不在 2.2.19 中。
答案2
Apache 2.2.23 已修复此问题。升级到 2.2.23 后无需修补