| varnishtest "Compression sets Vary header" |
| |
| #REQUIRE_OPTION=ZLIB|SLZ |
| |
| feature ignore_unknown_macro |
| |
| server s1 { |
| rxreq |
| expect req.url == "/plain/accept-encoding-gzip" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/plain/accept-encoding-invalid" |
| expect req.http.accept-encoding == "invalid" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/plain/accept-encoding-null" |
| expect req.http.accept-encoding == "<undef>" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/html/accept-encoding-gzip" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/html" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/html/accept-encoding-invalid" |
| expect req.http.accept-encoding == "invalid" |
| txresp \ |
| -hdr "Content-Type: text/html" \ |
| -bodylen 100 |
| |
| |
| rxreq |
| expect req.url == "/html/accept-encoding-null" |
| expect req.http.accept-encoding == "<undef>" |
| txresp \ |
| -hdr "Content-Type: text/html" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/dup-etag/accept-encoding-gzip" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "ETag: \"123\"" \ |
| -hdr "ETag: \"123\"" \ |
| -bodylen 100 |
| } -repeat 2 -start |
| |
| |
| server s2 { |
| rxreq |
| expect req.url == "/vary/no-vary" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/vary/accept-encoding" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "Vary: Accept-Encoding" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/vary/other" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "Vary: Other" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/vary/accept-encoding-and-other" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "Vary: Accept-Encoding,Other" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/vary/other-and-accept-encoding" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "Vary: Other,Accept-Encoding" \ |
| -bodylen 100 |
| |
| rxreq |
| expect req.url == "/vary/empty" |
| expect req.http.accept-encoding == "gzip" |
| txresp \ |
| -hdr "Content-Type: text/plain" \ |
| -hdr "Vary: " \ |
| -bodylen 100 |
| } -start |
| |
| |
| haproxy h1 -conf { |
| global |
| # WT: limit false-positives causing "HTTP header incomplete" due to |
| # idle server connections being randomly used and randomly expiring |
| # under us. |
| tune.idle-pool.shared off |
| |
| defaults |
| mode http |
| timeout connect "${HAPROXY_TEST_TIMEOUT-5s}" |
| timeout client "${HAPROXY_TEST_TIMEOUT-5s}" |
| timeout server "${HAPROXY_TEST_TIMEOUT-5s}" |
| |
| frontend fe-gzip |
| bind "fd@${fe_gzip}" |
| default_backend be-gzip |
| |
| backend be-gzip |
| compression algo gzip |
| compression type text/plain |
| server www ${s1_addr}:${s1_port} |
| |
| frontend fe-nothing |
| bind "fd@${fe_nothing}" |
| default_backend be-nothing |
| |
| backend be-nothing |
| server www ${s1_addr}:${s1_port} |
| |
| frontend fe-vary |
| bind "fd@${fe_vary}" |
| default_backend be-vary |
| |
| backend be-vary |
| compression algo gzip |
| compression type text/plain |
| server www ${s2_addr}:${s2_port} |
| |
| } -start |
| |
| client c1 -connect ${h1_fe_gzip_sock} { |
| txreq -url "/plain/accept-encoding-gzip" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.vary == "Accept-Encoding" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/plain/accept-encoding-invalid" \ |
| -hdr "Accept-Encoding: invalid" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/plain/accept-encoding-null" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/html/accept-encoding-gzip" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/html/accept-encoding-invalid" \ |
| -hdr "Accept-Encoding: invalid" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/html/accept-encoding-null" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/dup-etag/accept-encoding-gzip" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| } -run |
| |
| # This Client duplicates c1, against the "nothing" frontend, ensuring no Vary header is ever set. |
| client c2 -connect ${h1_fe_nothing_sock} { |
| txreq -url "/plain/accept-encoding-gzip" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/plain/accept-encoding-invalid" \ |
| -hdr "Accept-Encoding: invalid" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/plain/accept-encoding-null" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/html/accept-encoding-gzip" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/html/accept-encoding-invalid" \ |
| -hdr "Accept-Encoding: invalid" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/html/accept-encoding-null" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| |
| txreq -url "/dup-etag/accept-encoding-gzip" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.vary == "<undef>" |
| expect resp.bodylen == 100 |
| } -run |
| |
| |
| client c3 -connect ${h1_fe_vary_sock} { |
| txreq -url "/vary/no-vary" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.vary == "Accept-Encoding" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/vary/accept-encoding" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.vary == "Accept-Encoding" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/vary/other" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.vary == "Other,Accept-Encoding" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/vary/accept-encoding-and-other" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.vary == "Accept-Encoding,Other" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/vary/other-and-accept-encoding" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.vary == "Other,Accept-Encoding" |
| gunzip |
| expect resp.bodylen == 100 |
| |
| txreq -url "/vary/empty" \ |
| -hdr "Accept-Encoding: gzip" |
| rxresp |
| expect resp.status == 200 |
| expect resp.http.content-encoding == "gzip" |
| expect resp.http.vary == "Accept-Encoding" |
| gunzip |
| expect resp.bodylen == 100 |
| } -run |