playframework - 缓存 renderBinary 响应

标签 playframework

我正在尝试使用 renderBinary() 自定义一些静态资源的服务。
我想通过可选检查的 Controller 提供这些 Assets
授权并提供适当的文件。
我还想将一些文件缓存 1 年,因为它们永远不会改变。

我的 Controller 中的方法如下所示:

    public static void item(String item) { 
             // check authorization ... 
             response.cacheFor("365d"); 
             renderBinary(Play.getFile("static/" + item)); 
    } 

我遇到的问题是 play 会自动添加 Etag 和
使用renderBinary时将其缓存1小时,因此最终效果是
firefox 在需要时再次重新发出对这些文件的请求,只是为了得到
来自 Play 服务器的 304 响应。

我知道我可以用 nginx 作为前端来实现,但我想这样做
只用玩。

最佳答案

您无法避免 304 答案,因为 Play 中的缓存是服务器缓存,浏览器必须检查服务器以获取详细信息(答案 304 或项目)。这表明缓存工作正常,因为它被缓存并且不会再次检索。但是请记住,该缓存可能会丢失(如果该项目是旧的并被缓存策略删除),然后请求将再次加载该项目。

唯一真正的解决方案是将 etags 更改为 1 年。 application.conf中有一个属性,http.cacheControl,可以设置缓存的时间。默认为 1 小时,将其设置为 1 年,但请注意这将适用于所有项目(因此,例如,如果您更改 javascript 文件,最好也更改名称!)

关于playframework - 缓存 renderBinary 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757844/

相关文章:

java - 如何解决play framework 2.2.1 connect timeout异常问题

java - 玩! : How to place property value in groovy expression

java - 是否可以通过 Play!模板作为变量?

java - flash.discard 有什么作用?与 flash.clear() 有什么区别?

java - Heroku 中的 Greenscript

mysql - 在 Play Framework/JPA/hibernate 中截断表?

scala - Play 是否为 queryString 值顺序提供任何保证?

java - Play Framework 1.2.4 将项目导出/导入到 Eclipse IDE

scala - 使用 "in new WithApplication"时如何在 specs2 中进行设置/拆卸

scala - NoClassDefFounderror json 4s