В Grails отключить хеширование имен, но сохранить заголовок с истекающим сроком действия для плагина ресурсов hashandchange?

Я использую плагин ресурсов Grails. На клиенте я использую require.js для получения js.

моя конфигурация require.js -

baseUrl: '/js/lib', 

С включенным плагином ресурсов -

  1. браузер сделает запрос на /js/lib/abc.js впустую ~300 мс
  2. При достижении сервера он будет перенаправлен на /static/2432yi4h32kh4232h4k2h34ll.js.
  3. Браузер найдет этот файл в своем кеше и обслужит его.

Поэтому я отключил плагин cached-resources, используя -

grails.resources.mappers.hashandcache.excludes = ['**/*.js']

и новый конфиг require.js -

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

Удаление cached-resources решило проблему перенаправления, но также удалило заголовок expires, который устанавливался для js-файлов, из-за чего браузеры вообще не кэшировали js-файлы.

Как я могу отключить хеширование имени только в кэшированных ресурсах и сохранить установленные им заголовки с истекающим сроком действия. В противном случае, есть ли какие-либо плагины для Grails, которые я могу использовать для установки этих заголовков, и они хорошо работают с плагином Resources.

Я использую Tomcat и Haproxy для обслуживания контента.


person Yash Agarwal    schedule 20.02.2014    source источник
comment
Я знаю, что cached-resources используют внутренний плагин cache-headers для установки заголовков с истекающим сроком действия. Можно ли явно включить этот плагин только для файлов js.   -  person Yash Agarwal    schedule 20.02.2014


Ответы (1)


Я думаю, что лучшее решение - поместить хэшированное имя файла js в определение требования, а не исходное чистое имя.

Вы можете повторить хешированное имя, используя внешний тег ресурса.

<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"/>
person Fabiano Taioli    schedule 27.02.2014
comment
Спасибо, это был ответ, который я искал, хотя в итоге я настроил сервер nginx для полного обслуживания моего плагина ресурсов для удаления статического контента. В любом случае спасибо. - person Yash Agarwal; 28.02.2014