我正在使用一个Jenkins插件,它使用OkHttp库来处理与Github的集成。
当OkHttp试图使用不允许访问资源的令牌请求资源时,Github的/repos/:owner/:repo端点返回错误404。当扩展令牌的作用域以允许它访问资源时,OkHttp使用If修改的--从标头发出请求。报头的值设置为404响应中日期标头的值。来自第二个请求的响应是HTTP 304。根据Github的支持团队,这种行为是正确的行为,因为资源( /repos/:owner/:repo端点后面的数据)自第一个请求发出以来就没有被修改过。但是,这意味着OkHttp客户机现在使用缓存的404响应。
看起来日期头是用来计算新鲜度的,而不是检查资源最后一次修改的时间。RFC 7232节3.3说,客户端可以使用日期头的值作为如果修改的自值,但我还没有在网络上看到其他文献表明这种行为是可以接受的。在Mozilla关于If修改自标头的文档中,我没有看到任何对日期头的引用。
Postel定律不建议OkHttp不要误用日期标头,将它用作If修改后的标头的另一个源吗?
发布于 2017-04-11 02:15:04
RFCs对什么行为是合适的是明确的。如果RFC说Date头可以与If-Modified-Since一起使用,那么它可以是。
考虑说服GitHub在扩展范围时使缓存无效。如果2017-03-01提供了答复,2017-04-01扩大了令牌的范围,那么2017-04-01有效地修改了资源。
另一个选择是禁用OkHttp的缓存。与每个缓存一样,由于遵守错误缓存配置的指令,它违反了Postel定律。
https://stackoverflow.com/questions/43333829
复制相似问题