feat(h5): FastAPI StaticFiles 同源托管 /h5(.html no-cache)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
guke
2026-06-29 12:51:42 +08:00
parent 46c650ecb8
commit 4fb8f6447c
2 changed files with 31 additions and 0 deletions
+17
View File
@@ -142,3 +142,20 @@ app.mount(
StaticFiles(directory=str(_media_root)),
name="media",
)
# 业务 H5 同源托管(/h5)。与 /api/v1 同 host → H5 用相对路径调后端,免 CORS。
# .html 加 no-cache:后端改完用户重开页即拉新(远程热更核心);js/图片走默认缓存。
class _NoCacheHTMLStaticFiles(StaticFiles):
async def get_response(self, path: str, scope):
resp = await super().get_response(path, scope)
if path.endswith(".html"):
resp.headers["Cache-Control"] = "no-cache"
return resp
_h5_root = Path(__file__).resolve().parent.parent / "h5"
app.mount(
"/h5",
_NoCacheHTMLStaticFiles(directory=str(_h5_root), html=True),
name="h5",
)
+14
View File
@@ -0,0 +1,14 @@
"""H5 静态托管冒烟:/h5 同源服务页面 + .html no-cache(热更核心)。"""
from __future__ import annotations
def test_h5_shared_bridge_served(client) -> None:
resp = client.get("/h5/shared/bridge.js")
assert resp.status_code == 200
def test_h5_html_no_cache(client) -> None:
# records 迁入前,先用已在仓库的 mine 页验证 .html 的 no-cache 响应头
resp = client.get("/h5/mine/index.html")
assert resp.status_code == 200
assert resp.headers.get("cache-control") == "no-cache"