caching - 在Grails中,禁用名称哈希,但保持hashandchange资源插件的过期 header ?

标签 caching grails requirejs expires-header

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

我的require.js配置-

baseUrl: '/js/lib', 

启用资源插件后-
  • 浏览器将请求 /js/lib/abc.js 浪费〜300ms
  • 到达服务器后,它将重定向到/static/2432yi4h32kh4232h4k2h34ll.js
  • 浏览器将在其缓存中找到该文件并提供服务。

  • 因此,我使用-禁用了缓存资源插件-
    grails.resources.mappers.hashandcache.excludes = ['**/*.js']
    

    和新的require.js配置-
    baseUrl: '/static/js/lib',    
    urlArgs: "bust=" + application_version,
    

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

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

    我正在使用 Tomcat Haproxy 来提供内容。

    最佳答案

    我认为最好的解决方案是将哈希的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"/>
    

    关于caching - 在Grails中,禁用名称哈希,但保持hashandchange资源插件的过期 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909960/

    相关文章:

    PHP 尖峰 cpu 使用率

    amazon-web-services - 如何为 AWS API Gateway 设置缓存 key ?

    php - 如何在 PHP 中为 ob_start 传递带参数的回调函数?

    grails - 如何在 grails 3 中将 gson View 呈现为字符串?

    jquery - 根据动态ajax响应移动div并与页面上的其他信息进行比较

    tomcat - 部署到外部 Tomcat 服务器时的 Grails 3.0 上下文路径

    javascript - 使用requirejs将项目构建为单个文件,然后对其进行优化(创建源映射)

    javascript - requirejs 意外行为

    javascript - View 未使用 require.js 文本呈现!插入

    ios - AFNetworking 2.0 缓存问题