Reduce overhead to run headers middleware (#142032)

Instead of having to itererate a dict, update
the headers multidict using a pre-build CIMultiDict
which has an internal fast path
This commit is contained in:
J. Nick Koston 2025-04-01 21:09:39 -10:00 committed by GitHub
parent 2305cb0131
commit bb7e1d4723
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3,25 +3,34 @@
from __future__ import annotations
from collections.abc import Awaitable, Callable
from typing import Final
from aiohttp import hdrs
from aiohttp.web import Application, Request, StreamResponse, middleware
from aiohttp.web_exceptions import HTTPException
from multidict import CIMultiDict, istr
from homeassistant.core import callback
REFERRER_POLICY: Final[istr] = istr("Referrer-Policy")
X_CONTENT_TYPE_OPTIONS: Final[istr] = istr("X-Content-Type-Options")
X_FRAME_OPTIONS: Final[istr] = istr("X-Frame-Options")
@callback
def setup_headers(app: Application, use_x_frame_options: bool) -> None:
"""Create headers middleware for the app."""
added_headers = {
"Referrer-Policy": "no-referrer",
"X-Content-Type-Options": "nosniff",
"Server": "", # Empty server header, to prevent aiohttp of setting one.
}
added_headers = CIMultiDict(
{
REFERRER_POLICY: "no-referrer",
X_CONTENT_TYPE_OPTIONS: "nosniff",
hdrs.SERVER: "", # Empty server header, to prevent aiohttp of setting one.
}
)
if use_x_frame_options:
added_headers["X-Frame-Options"] = "SAMEORIGIN"
added_headers[X_FRAME_OPTIONS] = "SAMEORIGIN"
@middleware
async def headers_middleware(