Super Page Cache
之前一直用的 WP Super Cache 这个缓存插件,这个插件主要用于本地生成静态页缓存,并不与 Cloudflare 配合,当然你可以在 Cloudflare 上再加上一层缓存。但是关键是在更新文章和首页时要让缓存失效,这需要 Cloudflare 的 API token,这个插件并不支持。
Super Page Cache 这个插件是支持 Cloudflare API token 的,在更新帖子后可以直接让缓存失效,接着通过 Cloudflare 解析的站点再次请求时,会再走一次 Cloudflare 代理然后生成缓存。不过启用这个插件时,不要启用磁盘页面缓存选项,他会把用户登录信息缓存页面也缓存,这是不可以的。
页面缓存
Cloudflare 免费用户只支持三个页面缓存规则,wordpress 站点够用。这三个规则是:
- example.com/*preview=true 绕过
- example.com/wp-admin/* 绕过
- example.com/* 缓存级别: 缓存所有内容, 边缘缓存 TTL: 1个月
Cache Rules
登录 cookie 不使用缓存。
(starts_with(http.request.full_uri, "https://example.com/") and (http.cookie contains "wordpress_sec_" or http.cookie contains "wordpress_logged_in" or http.cookie contains "comment_"))
WP Super Cache 还可以启用
WP Super Cache 主要是生成静态页,不让他走 php 走数据库请求,登录用户页面不走缓存。这样即使 cloudflare 没有命中缓存,还是会来请求这个静态页。
Cloudflare 的 Cache Rules 和 Page Rules 有一些关键区别:
-
Cache Rules:专注于缓存管理,允许你更精细地控制缓存行为。你可以根据请求的 URL、HTTP 请求头、文件类型等多个条件来设置缓存规则1。这样,你可以为不同的资源类型或条件创建不同的缓存策略。
-
Page Rules:更广泛的功能,不仅可以管理缓存,还可以处理重定向、修改头信息、应用安全控制等。Page Rules 主要通过 URL 路径来定义规则,但缓存相关的功能现在已经转移到 Cache Rules 中1。
简单来说,Cache Rules 更专注于缓存管理,而 Page Rules 提供了更广泛的功能,包括缓存管理在内。
https://blog.cloudflare.com/introducing-cache-rules/
https://blog.cloudflare.com/cdn-cache-control/
缓存响应头
服务器通过 HTTP 头信息来判断客户端缓存的资源是否与服务器上的资源一致。以下是几种常见的机制:
-
Last-Modified 和 If-Modified-Since:
- Last-Modified:服务器在响应头中包含
Last-Modified
字段,表示资源最后一次修改的时间。 - If-Modified-Since:客户端在后续请求中包含
If-Modified-Since
字段,值为上次请求时Last-Modified
的值。服务器会比较这个时间与资源的实际修改时间,如果资源没有更新,则返回304 Not Modified
。
- Last-Modified:服务器在响应头中包含
-
ETag 和 If-None-Match:
- ETag:服务器在响应头中包含
ETag
字段,这是资源的唯一标识符,通常是资源内容的哈希值。 - If-None-Match:客户端在后续请求中包含
If-None-Match
字段,值为上次请求时ETag
的值。服务器会比较这个标识符与资源的当前标识符,如果一致,则返回304 Not Modified
。
- ETag:服务器在响应头中包含
这两种机制都是为了让服务器能够高效地判断资源是否发生变化,从而决定是否需要返回完整的资源内容。通过这些头信息,服务器可以有效地管理缓存,减少不必要的数据传输,提高网页加载速度。
解释响应头
age: 96
alt-svc: h3=":443"; ma=86400
cache-control: s-maxage=31536000, max-age=60
cf-cache-status: HIT
cf-ray: 90f196a5dcba14fc-LAX
date: Sun, 09 Feb 2025 05:51:35 GMT
last-modified: Sun, 09 Feb 2025 05:49:58 GMT
link: <https://dev798.com/wp-json/>; rel="https://api.w.org/"
link: <https://dev798.com/wp-json/wp/v2/posts/24>; rel="alternate"; title="JSON"; type="application/json"
link: <https://dev798.com/?p=24>; rel=shortlink
nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
priority: u=0,i
report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=8aurImmV3leRgXHEXM6YityZ0NrFbb6b7%2FvOYTAwPsfuhfc%2FpJ4imqRncI0awKldXnkLdb9WPv6eLaM3B1C7To944zhVO%2FwpbEYe%2BQ0iBv1e7p%2FqG%2FX50E7WyOZn"}],"group":"cf-nel","max_age":604800}
server: cloudflare
server-timing: cfCacheStatus;desc="HIT"
server-timing: cfL4;desc="?proto=QUIC&rtt=383111&min_rtt=360781&rtt_var=126917&sent=10&recv=5&lost=0&retrans=1&sent_bytes=1454&recv_bytes=2112&delivery_rate=99&cwnd=12000&unsent_bytes=0&cid=1f3f43a2545c87ba&ts=1827&x=1"
server-timing: cfExtPri
server-timing: cfHdrFlush;dur=0
strict-transport-security: max-age=0
vary: Accept-Encoding, Cookie
x-pingback: https://dev798.com/xmlrpc.php
x-powered-by: PHP/8.4.1
x-wp-cf-super-cache-active: 1
x-wp-cf-super-cache-cache-control: s-maxage=31536000, max-age=60
x-wp-cf-super-cache-cookies-bypass: swfpc-feature-not-enabled
x-wp-spc-disk-cache: DISABLED
这个 HTTP 响应头包含了许多字段,每个字段都提供了关于请求和响应处理的信息。以下是对每个字段的解释:
-
age: 96
:- 表示响应在缓存中存储的时间(以秒为单位)。这意味着响应已经在缓存中存在了 96 秒。
-
alt-svc: h3=":443"; ma=86400
:- 指定了服务器支持的替代服务。在这里,
h3
表示 HTTP/3,ma=86400
表示这个信息的有效期为 86400 秒(即 24 小时)。
- 指定了服务器支持的替代服务。在这里,
-
cache-control: s-maxage=31536000, max-age=60
:s-maxage=31536000
:告诉共享缓存(如 CDN)可以缓存资源的最长时间为 31,536,000 秒(即 365 天)。max-age=60
:告诉客户端(如浏览器)可以缓存资源的最长时间为 60 秒。
-
cf-cache-status: HIT
:- 表示请求命中了 Cloudflare 的缓存,即资源是从缓存中提供的,而不是从源服务器重新获取的。
-
cf-ray: 90f196a5dcba14fc-LAX
:- 这是 Cloudflare 用于跟踪和调试的唯一请求标识符。
-
date: Sun, 09 Feb 2025 05:51:35 GMT
:- 表示响应生成的日期和时间。
-
last-modified: Sun, 09 Feb 2025 05:49:58 GMT
:- 表示资源最后一次修改的日期和时间。
-
link
头:- 提供了与当前资源相关的链接,例如 JSON API 和短链接。
-
nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
:- 用于配置网络错误日志(Network Error Logging),指定了报告端点和最大有效时间。
-
priority: u=0,i
:- 用于指定资源的优先级,但具体实现可能因浏览器而异。
-
report-to
:- 指定了报告端点和最大有效时间,用于网络错误日志。
-
server: cloudflare
:- 表示响应是由 Cloudflare 服务器处理的。
-
server-timing
头:- 提供了关于请求处理时间的详细信息,例如缓存状态、传输协议、往返时间等。
-
strict-transport-security: max-age=0
:- 表示 HTTP Strict Transport Security (HSTS) 策略,但
max-age=0
表示该策略不强制执行。
- 表示 HTTP Strict Transport Security (HSTS) 策略,但
-
vary: Accept-Encoding, Cookie
:- 指定了决定是否可以使用缓存响应的请求头。如果这些头发生变化,缓存可能不会命中。
-
x-pingback: https://dev798.com/xmlrpc.php
:- 指定了用于 Pingback 的 URL。Pingback 是一种链接通知系统。
-
x-powered-by: PHP/8.4.1
:- 表示服务器使用的是 PHP 8.4.1 版本。
-
x-wp-cf-super-cache-active: 1
:- 表示 WP Super Cache 插件是活动的,用于 WordPress 的缓存。
-
x-wp-cf-super-cache-cache-control: s-maxage=31536000, max-age=60
:- 与
cache-control
类似,指定了缓存策略。
- 与
-
x-wp-cf-super-cache-cookies-bypass: swfpc-feature-not-enabled
:- 表示某些缓存功能未启用。
-
x-wp-spc-disk-cache: DISABLED
:- 表示磁盘缓存被禁用。