Cloudflare wird nicht wie erwartet zwischengespeichert

7

Ich frage mich, warum Cloulflare eine bestimmte statische JS-Datei nicht zwischenspeichern würde.

Angesichts der Anforderung:

curl -I http://www.testlifeinuk.com/dist/lifeinuk.js

Die Header gaben Folgendes zurück:

HTTP/1.1 200 OK
Date: Mon, 12 Jan 2015 10:59:21 GMT
Content-Type: application/javascript
Connection: keep-alive
Set-Cookie: __cfduid=d11a9f01292153436a211a9d807a3399b1421060361; expires=Tue, 12-Jan-16 10:59:21 GMT; path=/; domain=.testlifeinuk.com; HttpOnly
X-Powered-By: Express
Etag: W/"507660-1420797981000"
Cache-Control: public, max-age=1382400
Last-Modified: Fri, 09 Jan 2015 10:06:21 GMT
Vary: Accept-Encoding
Via: 1.1 vegur
CF-Cache-Status: MISS
Expires: Wed, 28 Jan 2015 10:59:21 GMT
Server: cloudflare-nginx
CF-RAY: 1a78d818b4af0b81-LHR

Was mich verwundert ist, dass die Anfrage immer wieder angezeigt wird, egal wie oft ich sie anführe

CF-Cache-Status: MISS

Irgendeine Idee warum?

Wudong
quelle
> MISS: Ressource nicht im Cache, vom Ursprungsserver bereitgestellt Von: support.cloudflare.com/hc/en-us/articles/…
Steve Tauber
anscheinend haben Sie jetzt die Lösung gefunden. Was hast du getan ?
Trif
Ich hatte das gleiche Problem. In meinem Fall habe ich vergessen, den Cache maxAge in Express zu setzen. So etwas in der Artserver.use(express.static(path.join(__dirname, 'public'), { maxAge: 3600 }));
Rudy Lee
Ja, aber das erklärt nicht, warum es nicht zwischengespeichert wird.
neugierigdannii

Antworten:

6

Sie müssen die Seitenregel im CloudFlare Admin-Bereich festlegen. Der erste Schritt zur Verwendung von Seitenregeln besteht darin, ein Muster zu definieren, das definiert, wann die Regel ausgelöst wird. Diese Muster können einfach sein, z. B. eine einzelne URL, oder kompliziert, einschließlich mehrerer Platzhalter. Stellen Sie sich vor, Sie haben ein Content-Management-System mit einer einzigen URL:

http://www.testlifeinuk.com

Wenn Sie nun versuchen, eine Regel mit URL-Muster zu erstellen:

http://www.testlifeinuk.com

Nur die Homepage wird zwischengespeichert!

Wenn Sie die gesamte Website zwischenspeichern möchten, müssen Sie den Platzhalter folgendermaßen verwenden:

 *testlifeinuk.com/*

Auf diese Weise werden alle Seiten und Ressourcen von Cloudflare wie folgt zwischengespeichert:

http://www.testlifeinuk.com/dist/lifeinuk.js
http://www.testlifeinuk.com/mypage.html
https://www.testlifeinuk.com/mypage.html
https://testlifeinuk.com/mypage.html

und das Ergebnis des Headers ist:

HTTP/1.1 200 OK
Date: Mon, 25 May 2015 10:21:05 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.39-0+deb7u2
Expires: Mon, 25 May 2015 10:51:05 GMT
Cache-Control: public, max-age=1800
Pragma: no-cache
Vary: Accept-Encoding
CF-Cache-Status: HIT            <<<<< Look this parameter
Server: cloudflare-nginx
CF-RAY: 1ec082ee43150e60-MXP
Content-Encoding: gzip

Grüße

Michelangelo
quelle
4
Ich glaube das ist falsch. CloudFlare speichert standardmäßig statische Dateien wie js / css zwischen, aber keine HTML-Seiten. Siehe Informationen hier support.cloudflare.com/hc/en-us/articles/…
Tim
Ein nützliches Tool zur Bestätigung, dass alles in Ordnung ist, ist cf-cache-status.net
Jay
3

Abgesehen davon, was @Michelangelo über das erstmalige Einrichten von CloudFlare-Seitenregeln gesagt hat, müssen Sie auch sicherstellen, dass die Antwortheader korrekt festgelegt sind, damit Sie das Standard-Caching-Verhalten nicht überschreiben:

Wenn der Cache-Control-Header auf "privat", "kein Speicher", "kein Cache" oder "maximales Alter = 0" gesetzt ist oder wenn die Antwort ein Cookie enthält, speichert CloudFlare das nicht Ressource. Andernfalls wird die Ressource zwischengespeichert, wenn der Cache-Control-Header auf "public" gesetzt ist und das "max-age" größer als 0 ist oder wenn die Expires-Header zu einem späteren Zeitpunkt festgelegt werden.

Siehe: https://support.cloudflare.com/hc/en-us/articles/202775670-How-Do-I-Tell-Cloudflare-What-to-Cache-

Und deshalb hat @Rudy Lee gesagt, vergessen Sie nicht, die maxAgeOption festzulegen, da der Standardwert maxAgein Express 0 ist.

Siehe: https://expressjs.com/en/api.html#express.static

AJ Hsu
quelle
0

Eine andere Möglichkeit besteht darin, dass etwas, das in Ihrem .htaccess definiert ist, mit dem Caching von Cloudflare in Konflikt steht. Wenn dort abgelaufene Header festgelegt sind, überschreiben sie die Caching-Einstellungen von Cloudflare. Ich habe festgestellt, dass dies bei meiner eigenen Website der Fall ist, und ich habe es zunächst erst bemerkt, als ich einige Tests mit https://cf-cache-status.net durchgeführt habe

Jay
quelle