首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTP代理缓存是如何在服务标识和gzip编码资源之间做出决定的?

HTTP代理缓存是如何在服务标识和gzip编码资源之间做出决定的?
EN

Stack Overflow用户
提问于 2009-03-29 16:39:35
回答 3查看 1.7K关注 0票数 7

HTTP服务器使用内容协商为基于客户端Accept-Encoding头的单个URL标识(或gzip)编码提供服务。

现在假设在客户端和httpd之间有一个像squid这样的代理缓存。

如果代理缓存了URL的两个编码,那么它如何确定要服务哪一个?

非gzip实例(最初不是与Vary一起使用)可以服务于任何客户端,但编码的实例(有Vary: Accept-Encoding)只能发送给具有与原始请求中使用的Accept-Encoding头值相同的客户端。

例如,Opera发送"deflate, gzip, x-gzip, identity, *;q=0",而IE8发送"gzip, deflate"。根据规范,缓存不应该在两个浏览器之间共享内容编码的缓存。这是真的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-29 17:28:16

首先,当实体确实因头(或不存在)而变化时,不发送"Vary: Accept-Encoding“是不正确的。

尽管如此,规范目前确实不允许为对Opera的缓存响应服务,因为根据HTTPbis,第6部分,2.6节中的定义不同的头不匹配。也许这是一个我们应该放松对缓存的需求的领域(您可能需要对IETF HTTP邮件列表进行跟踪.

更新:原来这已经被标记为一个开放问题;我刚刚在我们的问题跟踪器中添加了一个问题,请参阅第147期

票数 8
EN

Stack Overflow用户

发布于 2009-03-29 20:20:10

朱利安当然是对的。教训:无论响应编码如何,在嗅探Vary: Accept-Encoding Accept-Encoding,时,总是发送。

为了回答我的问题,如果您错误地忽略了Vary,如果代理接收到一个非编码响应(没有Vary),它可以简单地缓存并返回每个后续请求(忽略Accept-Encoding)。鱿鱼干的

票数 2
EN

Stack Overflow用户

发布于 2010-03-17 20:28:19

忽略差异的最大问题是,如果缓存接收到的编码变体没有变化,那么它可能会根据其他请求发送该变体,即使这些请求的接受编码表明客户端无法理解内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/694918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档