这是W3C的公共bugzilla错误跟踪程序的存档快照,该程序于2019年4月退役。请参阅主页了解更多详细信息。
当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
你能给出一个验证器当前行为有问题的实际测试用例吗?据我所知:*验证器不对其检查的资源使用缓存*我假设您描述的问题来自于客户端(验证器)和服务器之间有一个缓存代理,而缓存在收到验证器的请求时,并没有验证其缓存版本的新鲜度,这似乎是错误的。根据RFC 2616第13.1.6节,具有“Cache-Control:max-age=0”的请求可能会有所帮助,但如果缓存行为不正常,这甚至是不确定的。。。
可以通过以下方式轻松复制:*将任何缓存代理(例如Squid)置于网站前面的反向代理模式*请求验证该站点上的页面*更改已验证页面的内容*在中间代理缓存页面的时间段内(根据HTTP规则)重新请求验证在客户端(验证器)没有明确请求强制进行新鲜度检查的情况下,通过返回缓存的内容(只要符合HTTP规则,例如基于Expires、cache-control或响应中的其他标头),缓存不会出现异常行为;它正在做它应该做的事情。验证程序实际上也没有行为不端。关键是,对于来自Validator的当前HTTP请求头,中间缓存返回缓存表示是可以接受的(在某些情况下)。但是,关键是用户通常不想验证缓存的内容,因此向请求添加Cache-Control头将使Validator工作更直观。(经过思考,它可能应该是“Cache-control:no-Cache”,尽管实际效果应该是相同的)。
(答复评论#2)>重点>对于来自Validator的当前HTTP请求头>中间缓存可以(在某些情况下)返回>缓存表示。理解,谢谢你的精彩解释。
该修复程序位于CVS中,将在下一版本中提供:http://lists.w3.org/Archives/Public/www-validator-cvs/2007年9月/0058.html
非常感谢您修复此问题。
CVS中的链接检查器也已完成。