feat(middleware): 添加HEAD请求中间件支持

添加HeadRequestMiddleware中间件,用于处理HEAD请求。该中间件将HEAD请求转换为GET请求并返回空响应体,同时保留状态码和头部信息,以符合HTTP规范要求。
This commit is contained in:
Miu Li 2025-08-03 12:57:53 +08:00
parent 0bddd95de3
commit da816d0944
2 changed files with 18 additions and 1 deletions

19
app.py
View File

@ -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 = {}

Binary file not shown.