diff --git a/tornado/httputil.py b/tornado/httputil.py index 13a95d909..74dfb87f1 100644 --- a/tornado/httputil.py +++ b/tornado/httputil.py @@ -345,7 +345,8 @@ def __contains__(self, name: object) -> bool: # in __getitem__ when it's not needed. if not isinstance(name, str): return False - return name in self._as_list + norm_name = _normalize_header(name) + return norm_name in self._as_list def __getitem__(self, name: str) -> str: header = _normalize_header(name) diff --git a/tornado/test/httputil_test.py b/tornado/test/httputil_test.py index 7fa528cdc..9c7ee093f 100644 --- a/tornado/test/httputil_test.py +++ b/tornado/test/httputil_test.py @@ -329,6 +329,9 @@ def test_multi_line(self): sorted(list(headers.get_all())), [("Asdf", "qwer zxcv"), ("Foo", "bar baz"), ("Foo", "even more lines")], ) + # Verify case insensitivity in-operator + self.assertTrue("asdf" in headers) + self.assertTrue("Asdf" in headers) def test_continuation(self): data = "Foo: bar\r\n\tasdf"