Whenever it can, Berlioz generates entity tags (ETags) so it can take advantage of HTTP caching. This is done automatically.
Is a service cacheable?
String getETag(ContentRequest req);
While the entity tag can be a non-specific value, such as the last modified date of a file, database or index, it must be fast to compute.
Use the Berlioz admin tools to check the processing time of this method. If it isn't comfortably and consistently under 10ms, there may be no point in computing an entity tag.
How Berlioz generates entity tags?
If the service is Cacheable, Berlioz will automatically compute an entity tag from the following values:
- the ETag seed created at startup,
- and the ETag from the XSLT templates when applicable,
- and the list of ETags produced by each Cacheable generator.
This means that the entity tag will change whenever:
- the application server (Jetty, etc...) is restarted,
- or the XSLT is modified,
- or any of the generators return a different ETag.
If the ETag of a generator is null, then this generator is not cacheable. This can be useful in cases when under some conditions, a generator isn't able to return a cacheable response.
How Berlioz sets Cache-Control?
Following is the order of value that Berlioz uses to generate the HTTP Cache-Control HTTP response header. See below for specific detail:
- When specified, the value of the
cache-controlattribute for a service.
- Next is the value of the
initialisationparameter of the Berlioz servlet.
- Without a value at the service-level or servlet-level, the value from the global server configuration will be used.
The cache-control HTTP header response is only sent for a service considered cacheable.
A specific Cache-Control HTTP response header can be created for any service in the services configuration (services.xml) through the use of the
cache-control attribute. For example:
<service id="example" method="get" cache-control="private, max-age=0"> ... </service>
Following is an example of how the servlet's initialisation parameter (
init-param) is declared in the Web descriptor (web.xml):
<servlet> <servlet-name>BerliozHTML</servlet-name> <servlet-class>org.weborganic.berlioz.servlet.BerliozServlet</servlet-class> <init-param> <param-name>cache-control</param-name> <param-value>private, max-age=0</param-value> </init-param> ... </servlet>
With no other option available, Berlioz drops back to the global
cache control value defined in the server configuration (config-[mode].xml).
<berlioz> <http cache-control="private, max-age=0"/> ... </berlioz>
cache control is not explicitely set, Berlioz will try to use the
max-age property as "
<berlioz> <http max-age="60"/> ... </berlioz>
If no time is specified, Berlioz will use 60 seconds.
The global configuration is usually the best way to specify the default value for the "Cache-Control" header. However, in development mode, set
cache control to "
max-age=0". This will ensure that pages are systematically reloaded by the Web browser.
Created on , last edited on