| varnishtest "Compression converts strong ETags to weak ETags" |
| |
| #REQUIRE_VERSION=1.9 |
| #REQUIRE_OPTION=ZLIB|SLZ |
| |
| feature ignore_unknown_macro |
| |
| server s1 { |
| rxreq |
| expect req.url == "/strong" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: \"123\"" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/weak" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: W/\"456\"" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/weak-incorrect-quoting" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: \"W/789\"" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/empty-strong" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: \"\"" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/empty-weak" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: W/\"\"" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/invalid1" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: \"invalid" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/invalid2" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: invalid\"" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/invalid3" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: invalid" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/invalid4" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: W/\"invalid" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/invalid5" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: W/invalid\"" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/invalid6" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: W/invalid" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/multiple" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: \"one\"" \ |
| -hdr "ETag: \"two\"" \ |
| -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-gzip |
| bind "fd@${fe_gzip}" |
| default_backend be-gzip |
| |
| backend be-gzip |
| compression algo gzip |
| compression type text/html text/plain |
| server www ${s1_addr}:${s1_port} |
| } -start |
| |
| client c1 -connect ${h1_fe_gzip_sock} { |
| txreq -url "/strong" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.etag == "W/\"123\"" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/weak" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.etag == "W/\"456\"" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/weak-incorrect-quoting" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.etag == "W/\"W/789\"" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/empty-strong" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.etag == "W/\"\"" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/empty-weak" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.etag == "W/\"\"" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/invalid1" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "<undef>" |
| expect resp.http.etag == "\"invalid" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/invalid2" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "<undef>" |
| expect resp.http.etag == "invalid\"" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/invalid3" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "<undef>" |
| expect resp.http.etag == "invalid" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/invalid4" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "<undef>" |
| expect resp.http.etag == "W/\"invalid" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/invalid5" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "<undef>" |
| expect resp.http.etag == "W/invalid\"" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/invalid6" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "<undef>" |
| expect resp.http.etag == "W/invalid" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/multiple" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "<undef>" |
| expect resp.bodylen == 100 |
| } -run |