| import pytest | |
| from .env import H2Conf, H2TestEnv | |
| @pytest.mark.skipif(condition=H2TestEnv.is_unsupported(), reason="mod_http2 not supported here") | |
| class TestConditionalHeaders: | |
| @pytest.fixture(autouse=True, scope='class') | |
| def _class_scope(self, env): | |
| H2Conf(env).add( | |
| """ | |
| KeepAlive on | |
| MaxKeepAliveRequests 30 | |
| KeepAliveTimeout 30""" | |
| ).add_vhost_test1().install() | |
| assert env.apache_restart() == 0 | |
| # check handling of 'if-modified-since' header | |
| def test_h2_201_01(self, env): | |
| url = env.mkurl("https", "test1", "/006/006.css") | |
| r = env.curl_get(url) | |
| assert r.response["status"] == 200 | |
| lm = r.response["header"]["last-modified"] | |
| assert lm | |
| r = env.curl_get(url, options=["-H", "if-modified-since: %s" % lm]) | |
| assert 304 == r.response["status"] | |
| r = env.curl_get(url, options=["-H", "if-modified-since: Tue, 04 Sep 2010 11:51:59 GMT"]) | |
| assert r.response["status"] == 200 | |
| # check handling of 'if-none-match' header | |
| def test_h2_201_02(self, env): | |
| url = env.mkurl("https", "test1", "/006/006.css") | |
| r = env.curl_get(url) | |
| assert r.response["status"] == 200 | |
| etag = r.response["header"]["etag"] | |
| assert etag | |
| r = env.curl_get(url, options=["-H", "if-none-match: %s" % etag]) | |
| assert 304 == r.response["status"] | |
| r = env.curl_get(url, options=["-H", "if-none-match: dummy"]) | |
| assert r.response["status"] == 200 | |
| @pytest.mark.skipif(True, reason="304 misses the Vary header in trunk and 2.4.x") | |
| def test_h2_201_03(self, env): | |
| url = env.mkurl("https", "test1", "/006.html") | |
| r = env.curl_get(url, options=["-H", "Accept-Encoding: gzip"]) | |
| assert r.response["status"] == 200 | |
| for h in r.response["header"]: | |
| print("%s: %s" % (h, r.response["header"][h])) | |
| lm = r.response["header"]["last-modified"] | |
| assert lm | |
| assert "gzip" == r.response["header"]["content-encoding"] | |
| assert "Accept-Encoding" in r.response["header"]["vary"] | |
| r = env.curl_get(url, options=["-H", "if-modified-since: %s" % lm, | |
| "-H", "Accept-Encoding: gzip"]) | |
| assert 304 == r.response["status"] | |
| for h in r.response["header"]: | |
| print("%s: %s" % (h, r.response["header"][h])) | |
| assert "vary" in r.response["header"] | |
| # Check if "Keep-Alive" response header is removed in HTTP/2. | |
| def test_h2_201_04(self, env): | |
| url = env.mkurl("https", "test1", "/006.html") | |
| r = env.curl_get(url, options=["--http1.1", "-H", "Connection: keep-alive"]) | |
| assert r.response["status"] == 200 | |
| assert "timeout=30, max=30" == r.response["header"]["keep-alive"] | |
| r = env.curl_get(url, options=["-H", "Connection: keep-alive"]) | |
| assert r.response["status"] == 200 | |
| assert "keep-alive" not in r.response["header"] |