Skip to content

Commit

Permalink
Further document ShallowEtagHeaderFilter limitations
Browse files Browse the repository at this point in the history
This commit improves the documentation for the
`ShallowEtagHeaderFilter`, stating that it is only meant to support a
subset of conditional HTTP requests: GET requests with "If-None-Match"
headers. Other headers and state changing HTTP methods are not supported
here, as the filter only operates on the content of the response and has
no knowledge of the resource being served.

Closes gh-30517
  • Loading branch information
bclozel committed Jul 6, 2023
1 parent b7b9f2c commit 430a24e
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
7 changes: 4 additions & 3 deletions framework-docs/modules/ROOT/pages/web/webmvc/filters.adoc
Expand Up @@ -69,9 +69,10 @@ written to the response and computing an MD5 hash from it. The next time a clien
it does the same, but it also compares the computed value against the `If-None-Match`
request header and, if the two are equal, returns a 304 (NOT_MODIFIED).

This strategy saves network bandwidth but not CPU, as the full response must be computed
for each request. Other strategies at the controller level, described earlier, can avoid
the computation. See xref:web/webmvc/mvc-caching.adoc[HTTP Caching].
This strategy saves network bandwidth but not CPU, as the full response must be computed for each request.
State-changing HTTP methods and other HTTP conditional request headers such as `If-Match` and `If-Unmodified-Since` are outside the scope of this filter.
Other strategies at the controller level can avoid the computation and have a broader support for HTTP conditional requests.
See xref:web/webmvc/mvc-caching.adoc[HTTP Caching].

This filter has a `writeWeakETag` parameter that configures the filter to write weak ETags
similar to the following: `W/"02a2d595e6ed9a0b24f027f2b63b134d6"` (as defined in
Expand Down
Expand Up @@ -46,6 +46,10 @@
* (e.g. a {@link org.springframework.web.servlet.View}) is still rendered.
* As such, this filter only saves bandwidth, not server performance.
*
* <p>State-changing HTTP methods and other HTTP conditional request headers such as
* {@code If-Match} and {@code If-Unmodified-Since} are outside the scope of this filter.
* Please consider using {@link ServletWebRequest#checkNotModified(String, long)} instead.
*
* @author Arjen Poutsma
* @author Rossen Stoyanchev
* @author Brian Clozel
Expand Down

0 comments on commit 430a24e

Please sign in to comment.