当前位置: 首页 > 知识库问答 >
问题:

如何为Spring Boot选择性地禁用缓存(manifest.appcache)

黄骏喆
2023-03-14
spring.resources.cache-period= # cache timeouts in headers sent to browser
"method": "GET",
"path": "/manifest.appcache",
"response": {
    "X-Application-Context": "application:local,flyway,oracle,kerberos:8080",
    "Expires": "Tue, 06 Oct 2015 16:59:39 GMT",
    "Cache-Control": "max-age=31556926, must-revalidate",
    "status": "304"
}

我想知道如何为manifest.appcache添加排除。IE和Chrome似乎用appcache做了正确的事情,而不管我的头是什么,但FF似乎更奇怪一点,它注意到appcache何时发生了变化,我认为我的缓存头搞砸了。

编辑:我应该从WebMvcAutoConfiguration的源代码中添加,它显示了如何为资源设置缓存,我只是不确定如何选择性地禁用我的1case W/O,这可能会破坏spring boot在该文件中设置的其余内容。

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (!this.resourceProperties.isAddMappings()) {
            logger.debug("Default resource handling disabled");
            return;
        }

        Integer cachePeriod = this.resourceProperties.getCachePeriod();
        if (!registry.hasMappingForPattern("/webjars/**")) {
            registry.addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/")
                    .setCachePeriod(cachePeriod);
        }
        if (!registry.hasMappingForPattern("/**")) {
            registry.addResourceHandler("/**")
                    .addResourceLocations(RESOURCE_LOCATIONS)
                    .setCachePeriod(cachePeriod);
        }
    }

共有1个答案

鲁乐
2023-03-14

基于这个答案,详细说明IE需要“max-age=1,必须重新验证”,并通过在所有浏览器上测试,设置属性值为

spring.resources.cache-period=1

将允许编写适当的http头,从而允许正确处理appcache清单。这并不是我所希望的解决方案(我希望缓存周期为0并具有适当的头),但它确实可以使浏览器正常运行,并正确利用appcache清单。

再次总结一下解决方案上下文--这是我的应用程序,它脱机下载我所有的资产(js/css/html),并从AppCache提供服务。

 类似资料:
  • 问题内容: 使用时出现缓存问题。 我用来将数据插入MySQL数据库。然后,我有另一个应用程序处理此数据,并直接对其进行更新。 但是总是返回旧数据而不是更新数据。我认为已缓存了我的请求……所以……我应如何禁用它? 问题答案: 人们通常认为,除了在事务本地使用的常规SQLAlchemy身份映射之外,还存在“缓存”的作用,这是因为他们正在观察事务隔离的影响。默认情况下,SQLAlchemy的会话在事务模

  • 问题内容: 我正在尝试编写一个单元测试类,该类必须使用相同的查询以相同的测试方法两次从数据库中获取结果。但是,由于第二次启用了Hibernate缓存,因此它实际上并没有访问数据库,只是从缓存中获取结果。 有人可以回答如何禁用中的缓存。 但是它没有用。 问题答案: 有人可以回答如何在persistence.xml中禁用缓存。 默认情况下,第二级缓存和查询缓存是禁用的(除非您显式缓存它们,否则不会缓存

  • 如果选择选项值是从循环中提取的,那么如何禁用该选项值?是否有其他方法解决此问题? 示例输出在循环和我想禁用选项值6和7。谢谢帮忙。

  • 我有一个具有以下属性的枚举: 此枚举有一个带有Jackson的@JsonValue注释的函数: 这将根据需要执行,将枚举值序列化为toString返回的值,这是枚举的名称。 我希望能够禁用@JsonValue注释,并且仅使用附加到此类的 Jackson 的默认 JSON 序列化行为:在某些情况下,必须获取表示整个枚举的对象而不仅仅是名称,)。 Jackson似乎没有内置这种能力(要么是这样,要么是

  • 问题内容: 当我使用Alamofire两次发送GET请求时,我得到的响应是相同的,但是我期望得到不同的响应。我想知道这是否是由于缓存造成的,如果是这样,我想知道如何禁用它。 问题答案: 迅捷3,alamofire 4 我的解决方案是: 为Alamofire创建扩展: 并使用它:

  • 问题内容: 我正在尝试在特定网站上抓取网页。该网页因我发送的不同Cookie的设置而有所不同。 如果我一一请求到网页,它给我正确的结果,但是当我在for循环中发送这些cookie时,它给了我相同的结果。我认为scrapy正在为我创建缓存,并在第二个请求中从缓存中获取响应。这是我的代码: 我希望print语句应为两个请求提供不同的结果。 如果不清楚,请在评论中提及。 问题答案: 缓存可以通过两种方式