From da816d094400ab40b2e3f829266a901fe73d162f Mon Sep 17 00:00:00 2001 From: mxr612 Date: Sun, 3 Aug 2025 12:57:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(middleware):=20=E6=B7=BB=E5=8A=A0HEAD?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E4=B8=AD=E9=97=B4=E4=BB=B6=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加HeadRequestMiddleware中间件,用于处理HEAD请求。该中间件将HEAD请求转换为GET请求并返回空响应体,同时保留状态码和头部信息,以符合HTTP规范要求。 --- app.py | 19 ++++++++++++++++++- requirements.txt | Bin 1384 -> 1618 bytes 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index 31463cf..6e4ecb6 100644 --- a/app.py +++ b/app.py @@ -16,7 +16,8 @@ import csv from io import StringIO from typing import Dict, List from starlette.middleware.base import BaseHTTPMiddleware -from starlette.types import ASGIApp +from starlette.types import ASGIApp, Message +from typing import Optional, Dict, Any # Initialize GeoIP2 reader try: @@ -99,6 +100,21 @@ class LanguageMiddleware(BaseHTTPMiddleware): return response +class HeadRequestMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + if request.method == 'HEAD': + # Create a new request with GET method + request.scope['method'] = 'GET' + # Process the request as GET + response = await call_next(request) + # Create a new response with empty body + return Response( + status_code=response.status_code, + headers=response.headers, + media_type=response.media_type + ) + return await call_next(request) + class UserIdentityMiddleware(BaseHTTPMiddleware): def __init__(self, app: ASGIApp): super().__init__(app) @@ -141,6 +157,7 @@ class UserIdentityMiddleware(BaseHTTPMiddleware): app = FastAPI() app.add_middleware(LanguageMiddleware) +app.add_middleware(HeadRequestMiddleware) app.add_middleware(UserIdentityMiddleware) app.mount("/static", StaticFiles(directory="static"), name="static") templates = {} diff --git a/requirements.txt b/requirements.txt index b268ebcce69ecec6805766007a622823a0ea00f9..710eb3a85c6a256da7a55eedd1dfdd3ac0c326bf 100644 GIT binary patch delta 235 zcmaFCb%|$#ACq+kLkSQTFeEeNGZZnTGS~v4A%h-+0T5d<@G@{Qz*JO#HAr zaIz33wB0ljD4WfY2$TV-g~^)&RTzNHFJQ=F zCQ?29|S-0H}ovG5`Po