我读到了关于no-cache
和must-revalidate
的相互矛盾的语句。
这个答案说:
使用must-revalidate时,如果服务器不响应重新验证请求,浏览器/代理应该返回504错误。在没有缓存的情况下,它只显示缓存的内容
然而,“只显示缓存的内容”而不进行重新验证与https://datatracker.ietf.org/doc/html/RFC7234#section-5.2.1.4中的内容相矛盾:
“no-cache”request指令表示,如果在源服务器上没有成功验证,缓存不得使用存储的响应来满足请求。
如果确实no-cache
不允许在没有重新验证的情况下使用缓存的响应,那么must-revalidate
又有什么意义呢?
缓存可能提供陈旧的响应:
“过时”响应是指具有明确的过期信息或允许进行启发式过期计算,但根据第4.2节中的计算并不新鲜的响应。
除非:
如果明确的协议内指令(例如,“无存储”或“无缓存”缓存指令,“必须重新验证”缓存响应指令,或适用的“S-maxage”或“代理重新验证”缓存响应指令;参见第5.2.2节)禁止缓存生成陈旧响应。
特别要注意的是,在此需求中,no-store
和no-cache
是缓存指令,而must-revalidate
是缓存响应指令。
因此,must-revalidate
是指源服务器指示当响应过时时可能不会重用,而不是客户端指示它们不会接受过时的响应。
我在java Play Framework作业中使用Caffeine cache实现来缓存传出的http请求,我看到,尽管缓存已经启动并运行,但我的服务仍然每次都访问外部服务器,而不是返回缓存中的值。我看到记录在日志中的键总是相同的。 所以我看到没有设置,所以这可能意味着缓存立即过期。但我仍然不知道如何在配置中设置它 我没有更改我的java代码,如果我需要这样做,我找不到任何示例,或者我只应该有一
我有一个简单的用例,服务器为请求返回Etag,并将该Etag作为标头(即)添加到所有后续url请求。如果响应中有变化,服务器可以用响应,否则可以用响应。对于后者,重用缓存中的响应是有意义的。但是okhttp总是返回作为缓存响应。 我做了一些故障排除,okhttp在内部将响应写入磁盘,但是不会将其返回到。仔细研究类,有一些文档明确说明不会使用缓存: 编辑-更正,Okhttp正确地添加了etag标头。
问题内容: 它可能是实现细节,但是对于Oracle和IBM JDK而言,至少是对已编译模式进行了缓存,还是作为应用程序开发人员我们需要自己对已编译模式进行缓存? 问题答案: 我不认为结果会被缓存,并且代码或文档中也没有这种行为的证据。自己实现这样的缓存(当然)是比较琐碎的,但是我对这样的缓存很有用的用例感兴趣。 回覆。下面的注释和String.split(),有一种不同的方法,即代码采用简单的1或
我希望有人能对我一直在研究但没有取得多大进展的一些事情有所帮助。 我想利用 NSURLCache 来返回我在 iOS 应用程序中进行的 API 调用的缓存响应。当设备联机时,如果缓存的响应足够新,我想返回它,否则从远程获取。当设备脱机时,我希望立即返回缓存的响应(如果有),无论其年龄如何。 我正在使用AFNetworking。我正在对我控制的服务器进行API调用。协议是HTTPS。响应头当前为。我
问题内容: 我想确保浏览器永远不会缓存服务器的响应,这样即使发出两个相同的请求(相隔一纳秒),也始终会与服务器联系。这是实现此目标的正确方法: 谢谢唐 问题答案: 不,那不是正确的方法。这是正确的方法: 您可能会看到其他人在建议其他条目/属性,但是当至少提及上述内容时,它们是完全不相关的。 更改后,请不要忘记在测试之前清除浏览器缓存。 也可以看看: 网站站长缓存教程
问题内容: 我使用一些GeoIP服务在页面上放置国家/地区标记,具体取决于国家/地区IP。我需要为网站上的所有页面缓存JSON响应。 将此代码放入: 是否可以将其缓存?-似乎不起作用。 或者使用HTML5 localStorage可能更好,但是我不确定该怎么做。 我也尝试了JSONCache插件,但是对我来说不起作用。 问题答案: 您可以这样使用localStorage: 演示 因此,在您的特定情