gpt4 book ai didi

http - 我应该添加缓存控制 : no-cache to GET endpoints of my REST API?

转载 作者:行者123 更新时间:2023-12-03 14:55:12 25 4
gpt4 key购买 nike

创建使用 POST/PUT 的 REST API 很简单。它们是非幂等的,因此默认情况下不会被浏览器缓存。

但是,在创建 GET 端点时,事情变得更棘手了。我担心浏览器(或特定浏览器)在默认情况下会尝试缓存 GET 请求,而我最终会得到陈旧的数据。

这种对激进缓存的恐惧是真的吗?

让我们以端点 GET /articles/123/comments 为例.

尽管这个端点是一个 GET 端点,但每个请求都可以返回不同的内容,因为文章的评论被提交。

  • 这会被缓存吗?
  • 它会被特定的攻击性浏览器缓存吗?

  • 假设没有与响应提供的缓存相关的 header 。
    content-length: 2518
    content-type: application/json
    date: Thu, 17 Oct 2019 07:51:59 GMT
    status: 200


    避免 GET 请求的陈旧数据的最佳实践是什么?

    似乎有不同的策略来解决这个问题,但最好的方法是什么?
  • 通过唯一的查询字符串缓存破坏我的 GET 调用?

    例如。 GET /articles/123/comments?nonce=12312310980923409
  • 添加 Cache-Control: no-cache (这会一直受到尊重吗?)
  • 添加 ETag: xyz_HASH_OF_MY_LIST_OF_COMMENTS ?
  • 添加 Cache-Control: max-age=0 (禁用缓存)
  • 添加 Cache-Control: max-age=60 (减少缓存的最大持续时间)
  • 只是不要担心并假设没有像 ETag, Last-Modified 这样的标题GET 请求不会被任何浏览器缓存?
  • 最佳答案

    对于浏览器来说,GET 请求看起来是一样的,无论它们是由 JavaScript 发起到您的 REST API 还是您在地址栏中输入 URL。
    如果不设置缓存头会发生什么?
    该规范允许浏览器为所欲为。
    默认情况下,浏览器会缓存对 GET 请求的响应,并在持续时间内使用“最佳猜测”方法。
    您应该始终明确设置缓存以获得一致的行为。
    有关更多详细信息,请参阅

  • No expires header sent, content cached, how long until browser makes conditional GET request?
  • How long does Google Chrome cache a resource if expires and/or no-cache headers are not set?
  • How long are files usually kept in a browser's cache

  • 如何避免过时的内容?
    对此没有简单的答案。这取决于您的资源更改频率。如果它永远不会改变,您可以将其缓存很长时间,例如博客文章。如果它有时会发生变化,您可以将其缓存更短的时间,例如新闻 API。如果它“始终”更改,则不应缓存它,例如社交媒体新闻提要、股票价格 API 等。

    关于http - 我应该添加缓存控制 : no-cache to GET endpoints of my REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58428814/

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