diff --git a/playwright/_impl/_network.py b/playwright/_impl/_network.py index 3e5b8fe89..616cf3242 100644 --- a/playwright/_impl/_network.py +++ b/playwright/_impl/_network.py @@ -1047,7 +1047,7 @@ def get(self, name: str) -> Optional[str]: return separator.join(values) def get_all(self, name: str) -> List[str]: - return list(self._headers_map[name.lower()].keys()) + return list(self._headers_map.get(name.lower(), {}).keys()) def headers(self) -> Dict[str, str]: result = {} diff --git a/tests/async/test_network.py b/tests/async/test_network.py index e88b24c24..6c5cdfc60 100644 --- a/tests/async/test_network.py +++ b/tests/async/test_network.py @@ -371,6 +371,28 @@ async def test_response_headers_should_work(page: Page, server: Server) -> None: assert (await response.all_headers())["foo"] == "bar" +async def test_header_value_of_missing_header_should_not_add_it_to_all_headers( + page: Page, server: Server +) -> None: + server.set_route("/empty.html", lambda r: (r.setHeader("foo", "bar"), r.finish())) + + response = await page.goto(server.EMPTY_PAGE) + assert response + assert await response.header_value("x-missing") is None + assert await response.header_values("x-other") == [] + headers = await response.all_headers() + assert "x-missing" not in headers + assert "x-other" not in headers + assert headers["foo"] == "bar" + + request = response.request + assert await request.header_value("x-missing") is None + assert await request.header_value("x-other") is None + request_headers = await request.all_headers() + assert "x-missing" not in request_headers + assert "x-other" not in request_headers + + async def test_request_post_data_should_work(page: Page, server: Server) -> None: await page.goto(server.EMPTY_PAGE) server.set_route("/post", lambda r: r.finish()) diff --git a/tests/sync/test_network.py b/tests/sync/test_network.py index 8c196affb..b12daa0d8 100644 --- a/tests/sync/test_network.py +++ b/tests/sync/test_network.py @@ -114,3 +114,25 @@ def test_should_report_service_worker_request(page: Page, server: Server) -> Non ) as request_info: page.evaluate("() => fetch('/example.txt')") assert request_info.value.service_worker == worker_info.value + + +def test_header_value_of_missing_header_should_not_add_it_to_all_headers( + page: Page, server: Server +) -> None: + server.set_route("/empty.html", lambda r: (r.setHeader("foo", "bar"), r.finish())) + + response = page.goto(server.EMPTY_PAGE) + assert response + assert response.header_value("x-missing") is None + assert response.header_values("x-other") == [] + headers = response.all_headers() + assert "x-missing" not in headers + assert "x-other" not in headers + assert headers["foo"] == "bar" + + request = response.request + assert request.header_value("x-missing") is None + assert request.header_value("x-other") is None + request_headers = request.all_headers() + assert "x-missing" not in request_headers + assert "x-other" not in request_headers