【发布时间】:2017-09-06 03:02:16
【问题描述】:
我正在使用一个 Jenkins 插件,该插件使用 OkHttp 库来处理与 Github API 的集成。
当 OkHttp 尝试使用不允许访问资源的令牌请求资源时,Github 的 /repos/:owner/:repo 端点返回错误 404。当令牌的范围扩大到允许它访问资源时,OkHttp 使用 If-Modified-Since 标头发出请求。标头的值设置为 404 响应中的 Date 标头的值。第二个请求的响应是 HTTP 304。根据 Github 的支持团队的说法,这种行为是正确的行为,因为资源(/repos/:owner/:repo 端点后面的数据)自第一个请求被修改后没有被修改制成。但是,这意味着 OkHttp 客户端现在使用缓存的 404 响应。
似乎 Date 标头用于计算新鲜度,而不是检查资源上次修改的时间。 RFC 7232 section 3.3 说客户端可以使用 Date 标头的值作为 If-Modified-Since 值,但我没有在网络上看到其他文献表明这种行为是可以接受的。我在Mozilla's documentation on the If-Modified-Since header 中没有看到对日期标头的任何引用。
难道 Postel 定律不会建议 OkHttp 尽量不要滥用 Date 标头,将其用作 If-Modified-Since 标头的另一个来源?
【问题讨论】:
标签: http github okhttp okhttp3