在Grails中,禁用名称哈希但是为hashandchange资源插件保留expires头?

时间:2014-02-20 13:57:43

标签: caching grails requirejs expires-header

我正在使用 grails资源插件。在客户端我使用 require.js 来获取js。

my require.js config -

baseUrl: '/js/lib', 

启用资源插件 -

  1. 浏览器会请求 /js/lib/abc.js 浪费~300ms
  2. 到达服务器时,它将被重定向到/static/2432yi4h32kh4232h4k2h34ll.js
  3. 浏览器会在其缓存中找到此文件并提供服务。
  4. 所以我使用 -

    禁用了缓存资源插件
    grails.resources.mappers.hashandcache.excludes = ['**/*.js']
    

    和新的require.js配置 -

    baseUrl: '/static/js/lib',    
    urlArgs: "bust=" + application_version,
    

    删除缓存资源解决了重定向问题,但也删除了为js文件设置的expires标头,导致浏览器根本不缓存js文件。

    如何仅在缓存资源中禁用名称哈希并保留其设置的过期标头。 否则,是否有Grails的插件我可以使用它来设置这些标题,它们与Resources插件一起使用。

    我使用 Tomcat Haproxy 来投放内容。

1 个答案:

答案 0 :(得分:1)

我认为最好的解决方案是将散列的js文件名放在require定义中,而不是原始的明确名称。

您可以使用资源外部标记

回显散列名称
<r:external uri="js/custom.js"/>
<script type="text/javascript">
    var urlOfCSSToLoadInJSCode = '${r.external(uri:"css/custom.css").encodeAsJavaScript()}';
</script>
<r:external uri="icons/favicon.ico"/>