有人知道一旦用户通过重新加载页面成功登录,reddit 是如何设法绕过 cloudflare 静态 html 缓存的?
我看到登录成功后当前页面重新加载。
登录前的响应头:
CF-Cache-Status: HIT
CF-RAY: 23b76b8270950e30-MXP
Cache-Control: max-age=0, must-revalidate
Content-Encoding: gzip
Content-Length: 20794
Content-Type: text/html; charset=UTF-8
Date: Mon, 26 Oct 2015 16:08:27 GMT
Server: cloudflare-nginx
Vary: Accept-Encoding
X-Firefox-Spdy: 3.1
X-Frame-Options: SAMEORIGIN
strict-transport-security: max-age=15552000; includeSubDomains; preload
x-content-type-options: nosniff
x-moose: majestic
x-ua-compatible: IE=edge
x-xss-protection: 1; mode=block
登录后的响应头:
CF-RAY: 23b76cb065140e30-MXP
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate, max-age=0, must-revalidate
Content-Encoding: gzip
Content-Length: 18697
Content-Type: text/html; charset=UTF-8
Date: Mon, 26 Oct 2015 16:09:16 GMT
Expires: -1
Server: cloudflare-nginx
Vary: accept-encoding
X-Firefox-Spdy: 3.1
X-Frame-Options: SAMEORIGIN
strict-transport-security: max-age=15552000; includeSubDomains; preload
x-content-type-options: nosniff
x-moose: majestic
x-ua-compatible: IE=edge
x-xss-protection: 1; mode=block
谢谢任何提示。
答案1
使用 CloudFlare 实现此目的有两种主要方法:
- 在 CloudFlare 中,您可以设置页面规则以避免缓存您选择的文件。
- 您可以提供 CloudFlare 会尊重的无缓存标头。
要设置 Page Rule
- 转到您的 CloudFlare 仪表板并选择页面规则
- 添加匹配的页面规则*你的域名.com/*.html
- 将缓存级别设置为绕过
- 保存并部署
设置缓存标头
CloudFlare 的帮助中心解释如何通过源站发送的标头来控制缓存:
更改 CloudFlare 缓存内容的第二种方法是通过从源发送的缓存标头。除非将 Page Rule 设置为缓存所有内容,并且设置了边缘缓存过期 TTL,否则 CloudFlare 将尊重这些设置(但仅适用于我们默认缓存的扩展名的文件)。以下是我们考虑的缓存标头:
- 如果 Cache-Control 标头设置为“private”、“no-store”、“no-cache”或“max-age=0”,或者响应中存在 cookie,则 CloudFlare 将不会缓存资源。
- 否则,如果 Cache-Control 标头设置为“public”且“max-age”大于 0,或者 Expires 标头在未来的任何时间设置,我们将缓存该资源。
注意:根据 RFC 规则,“Cache-Control: max-age”优先于“Expires”标头。如果我们看到两者不一致,则 max-age 优先。
在 PHP 中,你可以使用 header 函数实现这一点,如下所示:
header("Cache-Control: no-cache, must-revalidate");