71 lines
2.9 KiB
Python
71 lines
2.9 KiB
Python
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"]
|