【问题标题】:Fetch API Cache Mode获取 API 缓存模式
【发布时间】:2015-10-14 13:46:00
【问题描述】:

根据spec,fetch api 有多种缓存模式。 (“default”、“no-store”、“reload”、“no-cache”、“force-cache”和“only-if-cached”)但是,尚不清楚每种模式的用途,或者浏览器支持的状态。

【问题讨论】:

  • 如果标头列表包含名称为If-Modified-SinceIf-None-MatchIf-Unmodified-SinceIf-MatchIf-Range 之一的标头,则 fetch 会将缓存模式设置为“no-store " 如果它是"默认"。 fetch.spec.whatwg.org/#concept-request-cache-mode 基本上你只能在此时打开和关闭它,或者看起来......

标签: javascript caching fetch-api


【解决方案1】:

您可以在此处查看 polyfill 的文档:https://fetch.spec.whatwg.org/

它确实解释了每个值的含义

"default" Fetch 将在通往网络的途中检查 HTTP 缓存。如果有新的响应,它将被使用。如果有过时的响应,将创建一个条件请求,否则创建一个正常请求。然后它使用响应更新 HTTP 缓存。 [HTTP]

"no-store"Fetch 的行为就像根本没有 HTTP 缓存一样。

"reload" Fetch 的行为就像在通往网络的路上没有 HTTP 缓存一样。因此,它会创建一个正常的请求并使用响应更新 HTTP 缓存。

"no-cache" Fetch 如果 HTTP 缓存中有响应,则创建条件请求,否则创建正常请求。然后它使用响应更新 HTTP 缓存。

"force-cache" Fetch 使用 HTTP 缓存中与请求匹配的任何响应,不注意过时。如果没有响应,它会创建一个正常的请求,用响应更新 HTTP 缓存。

【讨论】:

  • "reload" 不像 Chrome 58 上描述的那样工作。我调用了服务器,每次都返回一个递增的数字。将“max-age”设置为一个小时。当我使用“default”进行操作时,我希望它是正常数字。但是当我“重新加载”时,我希望得到下一个数字。但它仍然在“网络”面板中显示前面的内容并声明“(来自磁盘缓存)”。
  • 根据bugs.chromium.org/p/chromium/issues/detail?id=453190groups.google.com/a/chromium.org/forum/#!topic/blink-dev/…,Chrome 将在即将发布的版本中支持缓存模式(可能在撰写本文时为 63)
【解决方案2】:

对于那些与 HTTP 令牌名称匹配的,它们旨在具有相似的语义。不幸的是,现在您必须通过规范的算法来理解大多数这些值的含义。此外,目前还不清楚其中有多少会被标准化,因为它们可能存在一些安全问题,所以我最终可能会删除此功能的 API。

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多