| 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"] |