From 5d57a5e59749aeb7b356a1ba3eb2798e43e4f501 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Wed, 10 Jun 2026 21:00:48 +0800 Subject: [PATCH] respect origin browser TTL in Cloudflare rules --- docs/CLOUDFLARE_FREE_CACHE_ZH.md | 2 ++ scripts/configure_cloudflare_free.py | 5 ++++- tests/test_cloudflare_free_config.py | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/CLOUDFLARE_FREE_CACHE_ZH.md b/docs/CLOUDFLARE_FREE_CACHE_ZH.md index 0eef5da9..85089fd4 100644 --- a/docs/CLOUDFLARE_FREE_CACHE_ZH.md +++ b/docs/CLOUDFLARE_FREE_CACHE_ZH.md @@ -57,6 +57,8 @@ python scripts/configure_cloudflare_free.py --apply - 城市详情与 detail-batch:尊重源站成功、partial、stale 和错误缓存策略。 - `/api/scan/terminal` 与 `/api/system/status`:尊重源站成功、busy、failed 和错误缓存策略。 +所有公开缓存规则都显式设置 Browser TTL 为 Respect origin,避免 Cloudflare 免费版默认 Browser Cache TTL 把 HTML 或数据接口改成 4 小时本地缓存。 + ### 2. 最后绕过后端域名、动态和敏感请求 动作:Bypass cache diff --git a/scripts/configure_cloudflare_free.py b/scripts/configure_cloudflare_free.py index 519fce59..205c9e5f 100644 --- a/scripts/configure_cloudflare_free.py +++ b/scripts/configure_cloudflare_free.py @@ -107,7 +107,10 @@ def _compact_expression(expression: str) -> str: def _cache_rule(ref: str, description: str, expression: str, ttl: int | None = None) -> Dict[str, Any]: - action_parameters: Dict[str, Any] = {"cache": True} + action_parameters: Dict[str, Any] = { + "cache": True, + "browser_ttl": {"mode": "respect_origin"}, + } if ttl is not None: action_parameters["edge_ttl"] = { "mode": "respect_origin", diff --git a/tests/test_cloudflare_free_config.py b/tests/test_cloudflare_free_config.py index f3904a65..154de64e 100644 --- a/tests/test_cloudflare_free_config.py +++ b/tests/test_cloudflare_free_config.py @@ -23,10 +23,14 @@ def test_cloudflare_managed_rules_apply_path_specific_edge_ttls_then_bypass_sens ] == [31536000, 600, 300] for rule in rules[:3]: assert rule["action_parameters"]["cache"] is True + assert rule["action_parameters"]["browser_ttl"] == {"mode": "respect_origin"} assert rule["action_parameters"]["edge_ttl"]["mode"] == "respect_origin" assert rule["action_parameters"]["edge_ttl"]["status_code_ttl"][1]["value"] == 0 for rule in rules[3:-1]: - assert rule["action_parameters"] == {"cache": True} + assert rule["action_parameters"] == { + "cache": True, + "browser_ttl": {"mode": "respect_origin"}, + } assert rules[-1]["action_parameters"]["cache"] is False assert 'http.host eq "api.polyweather.top"' in rules[-1]["expression"] assert 'http.request.uri.query contains "force_refresh=true"' in rules[-1]["expression"]