A middleware to handle ETag for Starlette or FastAPI.
pip install etag-middleware
from etag import ETagMiddleware
from fastapi import FastAPI
from fastapi.middleware import Middleware
app = FastAPI(middleware=[Middleware(ETagMiddleware)])
from etag import ETagMiddleware
from starlette.applications import Starlette
from starlette.middleware import Middleware
app = Starlette(middleware=[Middleware(ETagMiddleware)])
-
It won't compute
ETag
for requests with body size less than 80 bytes by default. BeacauseETag
andIf-None-Match
increase more than 70 bytes to the response header, and computingETag
consumes CPU. You can adjust it by settingminimum_size
:app = FastAPI(middleware=[Middleware(ETagMiddleware, minimum_size=0)])
-
It won't compute
ETag
forStreamingResponse
. Because it will delay sending the response until collected all its body and consumes more memory. -
It compares
ETag
withIf-None-Match
forFileResponse
.