From: Marcelo Trylesinski Date: Sun, 22 May 2022 18:06:47 +0000 (+0200) Subject: Document `BaseHTTPMiddleware` bugs (#1640) X-Git-Tag: 0.20.1~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=82e07b3492802c43970314414dbd44d783f0e281;p=thirdparty%2Fstarlette.git Document `BaseHTTPMiddleware` bugs (#1640) * Document `BaseHTTPMiddleware` bugs * Apply suggestions from code review Co-authored-by: Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com> Co-authored-by: Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com> --- diff --git a/docs/middleware.md b/docs/middleware.md index b2191429..817f6366 100644 --- a/docs/middleware.md +++ b/docs/middleware.md @@ -215,7 +215,6 @@ class CustomHeaderMiddleware(BaseHTTPMiddleware): return response - middleware = [ Middleware(CustomHeaderMiddleware, header_value='Customized') ] @@ -227,6 +226,13 @@ Middleware classes should not modify their state outside of the `__init__` metho Instead you should keep any state local to the `dispatch` method, or pass it around explicitly, rather than mutating the middleware instance. +!!! bug + Currently, the `BaseHTTPMiddleware` has some known issues: + + - It's not possible to use multiple `BaseHTTPMiddleware` based middlewares. + - It's not possible to use `BackgroundTasks` with `BaseHTTPMiddleware`. + - Using `BaseHTTPMiddleware` will prevent changes to `contextlib.ContextVar`s from propagating upwards. That is, if you set a value for a `ContextVar` in your endpoint and try to read it from a middleware you will find that the value is not the same value you set in your endpoint (see [this test](https://github.com/encode/starlette/blob/621abc747a6604825190b93467918a0ec6456a24/tests/middleware/test_base.py#L192-L223) for an example of this behavior). + ## Using middleware in other frameworks To wrap ASGI middleware around other ASGI applications, you should use the