春季启动时静态内容etag处理是否已损坏?

时间:2017-08-03 15:33:53

标签: java spring spring-boot

我有一个弹簧启动应用程序,其中我尝试为静态图像配置内容资源策略。我在application.properties文件中设置了此配置:

spring.resources.chain.cache=true
spring.resources.cache-period=31536000
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/images/**

这使我可以为包含md5hash的图像资源提供网址,如下所示:http://localhost:8080/images/thing-90e8e8d5ff75897cb6068187c460b0b1.png
当我请求这个网址时,我会得到一个ETag标头,就像我期望ETag: "90e8e8d5ff75897cb6068187c460b0b1"

一样

但是,当我发出包含If-None-Match: "90e8e8d5ff75897cb6068187c460b0b1"的后续请求时,我得到的是200状态代码,而不是预期的304。

稍微调试一下Spring类,我发现对ServletWebRequest.validateIfNoneMatch(String etag)的调用总是得到一个空etag。似乎ResourceHttpRequestHandler.handleRequest(request, response)执行"未修改"在它调用setHeaders之前检查它是否为VersionedResource并生成ETag。

我设法通过在https://github.com/bclozel/spring-resource-handling克隆并运行示例应用来重现这一点。您可以请求http://localhost:8080/config-b5c916e3804c81ccd8956ce0bfe79ab0.js,获取ETag: "b5c916e3804c81ccd8956ce0bfe79ab0"并请求If-None-Match: "b5c916e3804c81ccd8956ce0bfe79ab0",但仍然可以获得200回复​​。

0 个答案:

没有答案