feat(middleware): 添加HEAD请求中间件支持
添加HeadRequestMiddleware中间件,用于处理HEAD请求。该中间件将HEAD请求转换为GET请求并返回空响应体,同时保留状态码和头部信息,以符合HTTP规范要求。
This commit is contained in:
parent
0bddd95de3
commit
da816d0944
19
app.py
19
app.py
@ -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 = {}
|
||||||
|
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user