gpt4 book ai didi

http - 为什么 OkHttp 在设置 If-Modified-Since header 时会像对待 Last-Modified header 一样对待 Date header ?

转载 作者:可可西里 更新时间:2023-11-01 16:36:22 25 4
gpt4 key购买 nike

我正在使用 Jenkins 插件,该插件使用 OkHttp 库来处理与 Github API 的集成。

当 OkHttp 尝试使用不允许访问资源的 token 请求资源时,Github 的/repos/:owner/:repo 端点返回错误 404。当 token 的范围扩展到允许它访问资源时,OkHttp 使用 If-Modified-Since header 发出请求。 header 的值设置为 404 响应中 Date header 的值。第二个请求的响应是 HTTP 304。根据 Github 的支持团队,此行为是正确的行为,因为资源(/repos/:owner/:repo 端点后面的数据)自第一个请求以来未被修改制成。但是,这意味着 OkHttp 客户端现在使用缓存的 404 响应。

似乎 Date header 旨在计算新鲜度,而不是检查上次修改资源的时间。 RFC 7232 section 3.3说客户可以使用 Date header 的值作为 If-Modified-Since 值,但我没有在网络上看到其他文献表明可以接受这种行为。我在 Mozilla's documentation on the If-Modified-Since header 中没有看到对 Date header 的任何引用.

Postel 定律难道不会建议 OkHttp 尽量不要滥用 Date header ,将其用作 If-Modified-Since header 的另一个来源吗?

最佳答案

RFC 明确规定了哪些行为是合适的。如果 RFC 说 Date header 可以与 If-Modified-Since 一起使用,那么它就可以。

考虑说服 GitHub 在范围扩大时使缓存失效。如果在 2017-03-01 提供了响应,并且在 2017-04-01 扩展了 token 的范围,则在 2017-04-01 有效地修改了资源。

您的另一个选择是禁用 OkHttp 的缓存。与每个缓存一样,它违反了 Postel 定律,因为它遵守了有缺陷的缓存配置的指令。

关于http - 为什么 OkHttp 在设置 If-Modified-Since header 时会像对待 Last-Modified header 一样对待 Date header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43333829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com