blob: f1032683bf4ee85f497b9e4b4f10f01ea782a6ae [file] [log] [blame]
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"]