Скажем, у вас есть файл, доступный по адресу:
/styles/screen.css
Вы можете добавить параметр запроса с информацией о версии в URI, например ::100100
/styles/screen.css?v=1234
или вы можете добавить информацию о версии, например ::100100
/v/1234/styles/screen.css
ИМХО второй метод лучше подходит для файлов CSS, потому что они могут ссылаться на изображения с использованием относительных URL, что означает, что если вы укажете background-image
, например, так:
body {
background-image: url('images/happy.gif');
}
его URL будет эффективно:
/v/1234/styles/images/happy.gif
Это означает, что если вы обновите используемый номер версии, сервер будет рассматривать его как новый ресурс и не будет использовать кэшированную версию. Если вы основываете свой номер версии на Subversion / CVS / и т.д. пересмотр означает, что будут замечены изменения в изображениях, на которые есть ссылки в файлах CSS. Это не гарантируется с первой схемой, то есть URL images/happy.gif
относительно /styles/screen.css?v=1235
равен /styles/images/happy.gif
, который не содержит никакой информации о версии.
Я реализовал решение для кэширования, используя эту технику, с сервлетами Java и просто обрабатываю запросы к /v/*
с помощью сервлета, который делегирует базовому ресурсу (т.е. /styles/screen.css
). В режиме разработки я установил заголовки кэширования, которые говорят клиенту всегда проверять свежесть ресурса с сервером (обычно это приводит к 304, если вы делегируете Tomcat DefaultServlet
и .css
, .js
и т. Д. не изменился) в режиме развертывания я установил заголовки с надписью «кешировать навсегда».