gpt4 book ai didi

spring - 测试 Spring HTTP 缓存

转载 作者:行者123 更新时间:2023-11-28 19:58:00 25 4
gpt4 key购买 nike

我有启用 http 缓存的 springboot 应用程序。我正在使用 webRequest.checkModifiedSince,如 here 中所述.在浏览器中运行我的应用程序时,我得到了正确的结果,第一次点击时为 200 状态代码,下次点击时为 304。但是当我对我的应用程序运行 maven 测试时,似乎 webRequest.checkModifiedSince 总是返回 false。

这是我的测试用例:

@Test
public void checkCache() throws Exception {
MvcResult res = this.mockMvc.perform(get("/resource/to/cache.jpg"))
.andExpect(status().isOk())
.andReturn();

String date = res.getResponse().getHeader("Last-Modified");
HttpHeaders headers = new HttpHeaders();
headers.setIfModifiedSince(Long.parseLong(date));
headers.setCacheControl("max-age=0");

this.mockMvc.perform(get("same/resource/as/above.jpg")
.headers(headers))
.andExpect(status().isNotModified());
}

我是不是做错了什么?

最佳答案

当发送有条件的 HTTP 请求时,您通常应该只发送 If-Modified-Since(使用 Last-Modified 值)和 If-None-Match (使用 Etag 值)。

在此示例中,您还发送了一个 max-age=0 指令,意思是“不要给我任何早于 0 秒的内容”,实际上是要求服务器发送响应无论如何(参见 RFC doc about max-age )。这通常是您在执行“硬刷新”时在浏览器请求中看到的那种指令。

从请求中删除该指令,服务器应响应 304 Not Modified。

关于spring - 测试 Spring HTTP 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30996152/

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