标签: cache-control

如何使任意URL的缓存失效?

根据http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.10,客户端必须在 POST、PUT 或 DELETE 请求后使与 URL 关联的缓存无效。

是否可以指示 Web 浏览器使任意 URL 的缓存失效,而不向其发出 HTTP 请求?

例如:

  1. PUT /companies/Nintendo创建一家名为“任天堂”的新公司
  2. GET /companies列出所有公司
  3. 每次我创建一个新公司时,我都希望使与GET /companies. 浏览器不会自动执行此操作,因为两者在不同的 URL 上运行。

Cache-Control机制是否不适合这种情况?我应该使用no-cachewithETag来代替吗?对于这种情况,最佳做法是什么?

no-cache我知道下次可以通过,GET /companies但这需要应用程序跟踪 URL 失效,而不是将责任推给浏览器。意思是,我想在步骤 1 之后使 URL 失效,而不是必须保留此信息并在步骤 2 中应用它。有什么想法吗?

ajax rest http cache-control

6
推荐指数
1
解决办法
1233
查看次数

为什么204没有被OkHttp缓存?

查看中的代码,CacheInterceptor我发现带有代码 204 的响应没有被缓存。但我相信 204 是可缓存的,如此处所讨论

我们使用204GET 的响应并不表示空响应,并且最近才注意到这些响应没有被缓存。

http cache-control http-headers okhttp

6
推荐指数
1
解决办法
689
查看次数

在 jboss 服务器中为 Web 应用程序进行新部署后,浏览器缓存文件未更新

我正在使用 jboss Server 7.1.1 来部署 java web 应用程序。对于 js、css、字体文件,浏览器缓存不会随着新的更改而更新。每次我们都坚持要求客户清除浏览器中的缓存以使新的更改生效。

是否有任何我可以配置的配置,以便在部署新代码时我可以引导所有请求提供更新的文件?

通过谷歌搜索这个主题,我发现我们可以编写自定义方法来设置电子标签值。有什么配置可以帮助我做到这一点吗?

大多数时候我们都会进行热部署(在 jboss 管理控制台中上传 war 文件,无需停机)。所以我怀疑在热部署期间自定义电子标签是否会更新,因为我们在服务器启动时配置了它。

或者有没有办法在 Web 应用程序的 web.xml 文件中处理它?

我需要一个可以使用浏览器缓存的解决方案,直到下次部署 js、css 和字体文件。我不知道如何设置“过期”标题。因为我们没有固定的部署周期。

如果您需要更多信息才能找到解决方案,请告诉我。

java etag jboss cache-control browser-cache

6
推荐指数
1
解决办法
1791
查看次数

通过高效的缓存策略提供静态资源 - Nuxt.js + GAE

我从Lighthouse得到以下信息:

在此输入图像描述

如何更改Nuxt.js SSR 网站上的缓存 TTL?我找到了一些答案,但没有找到关于 Nuxt.js 的信息...

重要提示:部署在 Google App Engine 中

google-app-engine caching cache-control lighthouse nuxt.js

6
推荐指数
1
解决办法
9608
查看次数

Chrome 和 Safari 不缓存大视频

我正在托管一个提供 HTML 视频的网站。我的服务器的视频响应包括 header cache-control: public, max-age=31536000, immutable。一切都在 Firefox 上运行,但在 Chrome 和 Safari 上,我没有看到我期望的缓存结果。

我的 JavaScript (Angular) 以随机时间间隔将视频搜索到随机位置。我面临着两个相关但截然不同的问题:

  1. 每次视频搜索时,Chrome 和 Safari 都会请求一个视频范围,即使它已经请求了该范围。这意味着如果我让浏览器保持打开状态,它将永远不会停止发出请求
  2. Chrome 和 Safari 不会在页面加载之间缓存视频。

我怀疑问题出在视频的大小 (170 MB) 上,因此我将其替换为较小的视频 (9 MB) 以进行测试。较短的视频不会遇到较长的视频所遇到的问题:

  1. 如果视频没有缓存。Chrome 和 Safari 只发出一个请求。他们不会对每次搜索都提出新的请求。
  2. 第一次请求后,Chrome 和 Safari 会缓存视频以用于新的视频请求。

两个视频的请求/响应标头相同,所有响应都有206状态。我能发现的唯一显着区别是较小的视频通常只需要 1 个请求即可下载,而较大的视频则需要多个请求。

为什么我无法缓存更大的视频?我该如何解决?

safari caching google-chrome cache-control browser-cache

6
推荐指数
1
解决办法
607
查看次数

缓存控制未返回 304

我有一个网站,其中包含不会更改的静态资产(js、图像等)。这些资源中的每一个都具有带有以下属性的缓存控制标头集:

cache-control: public, max-age=31536000, immutable
Run Code Online (Sandbox Code Playgroud)

但是,当我重新加载页面时,我仍然看到来自服务器的 200 响应,而不是 304 响应。浏览器指示正在从内存或磁盘缓存提供资源,但它仍在发出请求并下载内容。这以前是有效的,我倾向于这是一个浏览器错误,但我不完全确定。

http cache-control http-status-code-304 http-status-code-200

6
推荐指数
1
解决办法
2408
查看次数

如何禁用拦截调用的缓存?

我目前正在使用 Cypress 6.4.0,它启动我的 Angular 应用程序。这个Angular应用程序在开始时调用后端的时间同步路由。我们通过以下方式拦截此调用:

cy.wait('/api/t', { requestTimeout: 10_000 }).then((req) => {
    expect(req.response!.statusCode).to.equal(200);
    // some extra stuff...
});
Run Code Online (Sandbox Code Playgroud)

这对于第一次测试有效,但第二次测试总是失败。我检查了网络日志,似乎第二个响应来自浏览器缓存。我首先认为后端或 Angular 的缓存删除了pragmano-cache标头,但是当在没有 Cypress 的情况下运行应用程序时,标头就在那里。

我的测试中有两个测试,第二个测试失败了。或者,如果我有 1 个测试,并使用R.

那么,有没有办法禁用 Cypress 中的缓存呢?

cache-control angular cypress

6
推荐指数
1
解决办法
2066
查看次数

如何在Nestjs代码优先中设置Apollo的cacheControl指令

我正在尝试在某些字段上设置静态cacheControl,如此处所示

根据我的理解,我需要使用指令,因此我使用以下嵌套文档来声明指令

因此,我构建了一个 cacheControl 指令,这就是我的 GraphQLModule.forRootAsync 在 buildSchemaOptions 中的内容:

buildSchemaOptions: {
        directives: [
          new GraphQLDirective({
            name: 'cacheControl',
            locations: [
              DirectiveLocation.FIELD_DEFINITION,
              DirectiveLocation.OBJECT,
              DirectiveLocation.INTERFACE,
              DirectiveLocation.UNION
            ],
            args: {
              maxAge: { type: GraphQLInt },
              scope: {
                type: new GraphQLEnumType({
                  name: 'CacheControlScope',
                  values: {
                    PUBLIC: {
                      astNode: {
                        kind: 'EnumValueDefinition',
                        description: undefined,
                        name: {
                          kind: 'Name',
                          value: 'PUBLIC'
                        },
                        directives: []
                      }
                    },
                    PRIVATE: {
                      astNode: {
                        kind: 'EnumValueDefinition',
                        description: undefined,
                        name: {
                          kind: 'Name',
                          value: 'PRIVATE'
                        },
                        directives: []
                      } …
Run Code Online (Sandbox Code Playgroud)

cache-control code-first graphql apollo-server nestjs

6
推荐指数
0
解决办法
943
查看次数

缓存控制:我不明白“必须理解”

我不明白must-understandHTTPCache-Control标头的指令。有哪些示例说明何时使用此功能,以及服务器可能使用缓存可能理解或不理解的哪种状态代码?

来自 MDN 的文档

响应must-understand指令指示缓存仅在根据状态代码了解缓存要求时才应存储响应。

must-understandno-store应该与后备行为结合起来。

Cache-Control: must-understand, no-store
Run Code Online (Sandbox Code Playgroud)

如果缓存不支持must-understand,它将被忽略。如果no-store也存在,则不存储响应。

如果缓存支持must-understand,它会根据其状态代码来存储响应并了解缓存要求。

RFC 9111中也对其进行了正式描述:

必须理解的响应指令将响应的缓存限制为能够理解并符合该响应状态代码要求的缓存。

包含必须理解指令的响应还应该包含 no-store 指令。当实现“必须理解”指令的缓存收到包含该指令的响应时,如果缓存理解并实现了状态代码的缓存要求,则它应该忽略“无存储”指令。

尽管有这些描述,我仍然不知道该指令在什么情况下有用。

http cache-control

6
推荐指数
2
解决办法
162
查看次数

如何为我的网站创建"清除缓存"按钮?

我想在我的网站上创建一个完全清除缓存的按钮.因为看起来Safari和Chrome的功能都不起作用.这可能吗?

javascript php cache-control browser-cache

5
推荐指数
1
解决办法
3215
查看次数