这是W3C的公共bugzilla错误跟踪程序的存档快照,该程序于2019年4月退役。请参阅主页了解更多详细信息。

错误4998 -验证器有时会使用缓存的内容(请求上的cache-control头会很有用)
总结: 验证程序有时会使用缓存的内容(请求的缓存控制头可能。。。
状态: 断然的固定的
别名:
产品: 验证器
分类: 未分类
组件: 检查(显示其他错误)
版本: 0.8.1
硬件: 全部全部
: 第2页正常的
目标里程碑: 0.8.2
受让人: 奥利维尔·特雷奥
QA联系人: qa-dev跟踪
网址:
白板:
关键词:
取决于:
阻碍:
 
报道: 2007-08-31 10:06 UTC由蒂姆·杰克逊
被改进的: 2008年12月1日03:03 UTC(历史)
1用户(显示)

另请参阅:


附件

描述 蒂姆·杰克逊 2007年8月31日10:06:51 UTC
当Validator请求页面进行验证时,它不会显式请求非缓存内容。虽然这本身并不是错误的,但这会产生反直觉和令人困惑的结果,如果Validator和目标站点之间碰巧存在缓存代理,则很难将Validator用于有用的开发目的,因为在修复验证错误时,不可能看到结果,因为Validator会一直看到缓存的旧版本,直到缓存过期。通过向Validator发出的HTTP请求添加Cache-control头,可以很容易地修复此问题;例如“缓存控制:最大年龄=0”可能会达到目的。如果将其添加到每个请求中会让开发人员感到不舒服,那么可以将其设置为UI选项(例如“request uncached version?”或其他选项)和/或配置文件选项,尽管老实说,我看不出简单地将其添加至每个请求的缺点;很少有人真的想看到可能过时的缓存副本的验证结果。我已验证验证程序在v0.8.1上没有执行此操作;来自Validator的典型HTTP请求如下所示:获取/HTTP/1.1TE:deflate,gzip;q=0.3连接:TE,关闭主持人:example.com用户代理:W3C_Validator/1.555
评论1 奥利维尔·特雷奥 2007年9月3日01:23:37 UTC
你能给出一个验证器当前行为有问题的实际测试用例吗?据我所知:*验证器不对其检查的资源使用缓存*我假设您描述的问题来自于客户端(验证器)和服务器之间有一个缓存代理,而缓存在收到验证器的请求时,并没有验证其缓存版本的新鲜度,这似乎是错误的。根据RFC 2616第13.1.6节,具有“Cache-Control:max-age=0”的请求可能会有所帮助,但如果缓存行为不正常,这甚至是不确定的。。。
评论2 蒂姆·杰克逊 2007年9月3日12:42:13 UTC
可以通过以下方式轻松复制:*将任何缓存代理(例如Squid)置于网站前面的反向代理模式*请求验证该站点上的页面*更改已验证页面的内容*在中间代理缓存页面的时间段内(根据HTTP规则)重新请求验证在客户端(验证器)没有明确请求强制进行新鲜度检查的情况下,通过返回缓存的内容(只要符合HTTP规则,例如基于Expires、cache-control或响应中的其他标头),缓存不会出现异常行为;它正在做它应该做的事情。验证程序实际上也没有行为不端。关键是,对于来自Validator的当前HTTP请求头,中间缓存返回缓存表示是可以接受的(在某些情况下)。但是,关键是用户通常不想验证缓存的内容,因此向请求添加Cache-Control头将使Validator工作更直观。(经过思考,它可能应该是“Cache-control:no-Cache”,尽管实际效果应该是相同的)。
评论3 奥利维尔·特雷奥 2007年9月11日05:04:12 UTC
(答复评论#2)>重点>对于来自Validator的当前HTTP请求头>中间缓存可以(在某些情况下)返回>缓存表示。理解,谢谢你的精彩解释。
评论4 奥利维尔·特雷奥 2007年9月11日05:07:15 UTC
该修复程序位于CVS中,将在下一版本中提供:http://lists.w3.org/Archives/Public/www-validator-cvs/2007年9月/0058.html
评论5 蒂姆·杰克逊 2007年9月18日08:55:59 UTC
非常感谢您修复此问题。
评论6 维尔·斯凯特 2007年9月18日16:24:35 UTC
CVS中的链接检查器也已完成。