根据http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.10,客户端必须在 POST、PUT 或 DELETE 请求后使与 URL 关联的缓存无效。
是否可以指示 Web 浏览器使任意 URL 的缓存失效,而不向其发出 HTTP 请求?
例如:
PUT /companies/Nintendo创建一家名为“任天堂”的新公司GET /companies列出所有公司GET /companies. 浏览器不会自动执行此操作,因为两者在不同的 URL 上运行。该Cache-Control机制是否不适合这种情况?我应该使用no-cachewithETag来代替吗?对于这种情况,最佳做法是什么?
no-cache我知道下次可以通过,GET /companies但这需要应用程序跟踪 URL 失效,而不是将责任推给浏览器。意思是,我想在步骤 1 之后使 URL 失效,而不是必须保留此信息并在步骤 2 中应用它。有什么想法吗?
查看中的代码,CacheInterceptor我发现带有代码 204 的响应没有被缓存。但我相信 204 是可缓存的,如此处所讨论的
我们使用204GET 的响应并不表示空响应,并且最近才注意到这些响应没有被缓存。
我正在使用 jboss Server 7.1.1 来部署 java web 应用程序。对于 js、css、字体文件,浏览器缓存不会随着新的更改而更新。每次我们都坚持要求客户清除浏览器中的缓存以使新的更改生效。
是否有任何我可以配置的配置,以便在部署新代码时我可以引导所有请求提供更新的文件?
通过谷歌搜索这个主题,我发现我们可以编写自定义方法来设置电子标签值。有什么配置可以帮助我做到这一点吗?
大多数时候我们都会进行热部署(在 jboss 管理控制台中上传 war 文件,无需停机)。所以我怀疑在热部署期间自定义电子标签是否会更新,因为我们在服务器启动时配置了它。
或者有没有办法在 Web 应用程序的 web.xml 文件中处理它?
我需要一个可以使用浏览器缓存的解决方案,直到下次部署 js、css 和字体文件。我不知道如何设置“过期”标题。因为我们没有固定的部署周期。
如果您需要更多信息才能找到解决方案,请告诉我。
我从Lighthouse得到以下信息:
如何更改Nuxt.js SSR 网站上的缓存 TTL?我找到了一些答案,但没有找到关于 Nuxt.js 的信息...
重要提示:部署在 Google App Engine 中
我正在托管一个提供 HTML 视频的网站。我的服务器的视频响应包括 header cache-control: public, max-age=31536000, immutable。一切都在 Firefox 上运行,但在 Chrome 和 Safari 上,我没有看到我期望的缓存结果。
我的 JavaScript (Angular) 以随机时间间隔将视频搜索到随机位置。我面临着两个相关但截然不同的问题:
我怀疑问题出在视频的大小 (170 MB) 上,因此我将其替换为较小的视频 (9 MB) 以进行测试。较短的视频不会遇到较长的视频所遇到的问题:
两个视频的请求/响应标头相同,所有响应都有206状态。我能发现的唯一显着区别是较小的视频通常只需要 1 个请求即可下载,而较大的视频则需要多个请求。
为什么我无法缓存更大的视频?我该如何解决?
我有一个网站,其中包含不会更改的静态资产(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
我目前正在使用 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 的缓存删除了pragma和no-cache标头,但是当在没有 Cypress 的情况下运行应用程序时,标头就在那里。
我的测试中有两个测试,第二个测试失败了。或者,如果我有 1 个测试,并使用R.
那么,有没有办法禁用 Cypress 中的缓存呢?
我正在尝试在某些字段上设置静态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) 我不明白must-understandHTTPCache-Control标头的指令。有哪些示例说明何时使用此功能,以及服务器可能使用缓存可能理解或不理解的哪种状态代码?
响应
must-understand指令指示缓存仅在根据状态代码了解缓存要求时才应存储响应。
must-understandno-store应该与后备行为结合起来。Run Code Online (Sandbox Code Playgroud)Cache-Control: must-understand, no-store如果缓存不支持
must-understand,它将被忽略。如果no-store也存在,则不存储响应。如果缓存支持
must-understand,它会根据其状态代码来存储响应并了解缓存要求。
RFC 9111中也对其进行了正式描述:
必须理解的响应指令将响应的缓存限制为能够理解并符合该响应状态代码要求的缓存。
包含必须理解指令的响应还应该包含 no-store 指令。当实现“必须理解”指令的缓存收到包含该指令的响应时,如果缓存理解并实现了状态代码的缓存要求,则它应该忽略“无存储”指令。
尽管有这些描述,我仍然不知道该指令在什么情况下有用。
我想在我的网站上创建一个完全清除缓存的按钮.因为看起来Safari和Chrome的功能都不起作用.这可能吗?
cache-control ×10
http ×4
caching ×2
ajax ×1
angular ×1
code-first ×1
cypress ×1
etag ×1
graphql ×1
http-headers ×1
java ×1
javascript ×1
jboss ×1
lighthouse ×1
nestjs ×1
nuxt.js ×1
okhttp ×1
php ×1
rest ×1
safari ×1