An ETag
(entity tag) is an HTTP response header returned by an HTTP/1.1 compliant
web server used to determine change in content at a given URL. It can be
considered to be the more sophisticated successor to the
Last-Modified
header. When a server returns a
representation with an ETag header, the client can use this header in
subsequent GETs, in an If-None-Match
header. If the
content has not changed, the server returns 304: Not
Modified
.
Support for ETags is provided by the servlet filter
ShallowEtagHeaderFilter
. It is a plain Servlet
Filter, and thus can be used in combination with any web framework. The
ShallowEtagHeaderFilter
filter creates so-called
shallow ETags (as opposed to deep ETags, more about that later).The
filter caches the content of the rendered JSP (or other content),
generates an MD5 hash over that, and returns that as an ETag header in the
response. The next time a client sends a request for the same resource, it
uses that hash as the If-None-Match
value. The filter
detects this, renders the view again, and compares the two hashes. If they
are equal, a 304
is returned. This filter will not save
processing power, as the view is still rendered. The only thing it saves
is bandwidth, as the rendered response is not sent back over the
wire.
You configure the ShallowEtagHeaderFilter
in
web.xml
:
<filter> <filter-name>etagFilter</filter-name> <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class> </filter> <filter-mapping> <filter-name>etagFilter</filter-name> <servlet-name>petclinic</servlet-name> </filter-mapping>