haproxy/reg-tests/cache/post_on_entry.vtc
Remi Tricot-Le Breton 72cffaf440 MEDIUM: cache: Remove cache entry in case of POST on the same resource
In case of successful unsafe method on a stored resource, the cached entry
must be invalidated (see RFC7234#4.4).
A "non-error response" is one with a 2xx (Successful) or 3xx (Redirection)
status code.
This implies that the primary hash must now be calculated on requests
that have an unsafe method (POST or PUT for instance) so that we can
disable the corresponding entries when we process the response.
2020-12-04 10:21:56 +01:00

67 lines
1.6 KiB
Plaintext

varnishtest "A successful unsafe method (POST for instance) on a cached entry must disable it."
#REQUIRE_VERSION=2.3
feature ignore_unknown_macro
server s1 {
rxreq
expect req.url == "/cached"
txresp -hdr "Cache-Control: max-age=5" \
-bodylen 150
rxreq
expect req.url == "/cached"
expect req.method == "POST"
txresp
rxreq
expect req.url == "/cached"
txresp -hdr "Cache-Control: max-age=5" \
-bodylen 100
} -start
haproxy h1 -conf {
defaults
mode http
${no-htx} option http-use-htx
timeout connect 1s
timeout client 1s
timeout server 1s
frontend fe
bind "fd@${fe}"
default_backend test
backend test
http-request cache-use my_cache
server www ${s1_addr}:${s1_port}
http-response cache-store my_cache
http-response set-header X-Cache-Hit %[res.cache_hit]
cache my_cache
total-max-size 3
max-age 20
max-object-size 3072
} -start
client c1 -connect ${h1_fe_sock} {
txreq -url "/cached"
rxresp
expect resp.status == 200
expect resp.bodylen == 150
txreq -method "POST" -url "/cached" -bodylen 100
rxresp
expect resp.status == 200
expect resp.http.X-Cache-Hit == 0
txreq -url "/cached"
rxresp
expect resp.status == 200
expect resp.bodylen == 100
expect resp.http.X-Cache-Hit == 0
} -run