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 io import StringIO
from typing import Dict, List from typing import Dict, List
from starlette.middleware.base import BaseHTTPMiddleware 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 # Initialize GeoIP2 reader
try: try:
@ -99,6 +100,21 @@ class LanguageMiddleware(BaseHTTPMiddleware):
return response 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): class UserIdentityMiddleware(BaseHTTPMiddleware):
def __init__(self, app: ASGIApp): def __init__(self, app: ASGIApp):
super().__init__(app) super().__init__(app)
@ -141,6 +157,7 @@ class UserIdentityMiddleware(BaseHTTPMiddleware):
app = FastAPI() app = FastAPI()
app.add_middleware(LanguageMiddleware) app.add_middleware(LanguageMiddleware)
app.add_middleware(HeadRequestMiddleware)
app.add_middleware(UserIdentityMiddleware) app.add_middleware(UserIdentityMiddleware)
app.mount("/static", StaticFiles(directory="static"), name="static") app.mount("/static", StaticFiles(directory="static"), name="static")
templates = {} templates = {}

Binary file not shown.