HTTP-Header

Begonnen von Talkabout, 14 Juli 2015, 22:55:25

Vorheriges Thema - Nächstes Thema

Talkabout

Hallo zusammen,

ich habe gerade ein Problem mit dem Browser-Cache im Dashboard. Ich würde diesen gerne modul-seitig deaktivieren. Dies würde aber nur über ein "meta"-Tag im Header der Seite funktionieren. in der 01_FHEMWEB.pm habe ich an der Stelle, wo die Header geschrieben werden, nichts gefunden, wo ich mich einhängen könnte. Daher 2 Fragen:

- ist es sinnvoll hier überhaupt zu cachen? FHEM ist sehr dynamisch, ein Cache macht da meiner Ansicht nach wenig Sinn
- wenn es trotzdem sinnvoll sein sollte, wie Aufwändig wäre es die Header im Modul manipulieren zu können? Die Lösung hierfür könnte äquivalent zum Konzept der externen Links sein:

$data{FWEXT}{$url}{HEADERHTML} = '<meta...></meta>';

Was haltet Ihr davon?

Gruss

rudolfkoenig

Ich bin mit Caching in FHEMWEB noch nicht zufrieden.

Cachen generell ist sinnvoll, da wir inzwischen ueber 20 Dateien fuer eine Seite brauchen (Hauptseite/Bilder/css/js). Im Detail muss man aber unterscheiden, welche Daten man cachen sollte, und welche nicht. Die "Hauptseite" sollte nicht gecached  werden, die anderen Seiten gerne und agressiv, wenn wir einen Weg finden, dem Browser zu sagen, dass diese Dateien wg. update neu abzuholen sind. Habe im Moment keine Ahnung, wie ich das machen soll.

Z.Zt. wird nichts gecached, und der Browser fragt via ETags (==Zeitstempel) fuer alle Dateien ab, ob die sich geaendert haben. FHEMWEB antwortet meist mit nein, und die Datei wird nicht heruntergeladen. Nicht optimal, was die Geschwindigkeit betrifft, aber relativ sicher.

Nach dieser Theorie waere dein <meta> Tag ueberfluessig.

Talkabout

Zitat von: rudolfkoenig am 15 Juli 2015, 11:00:52
Ich bin mit Caching in FHEMWEB noch nicht zufrieden.

Cachen generell ist sinnvoll, da wir inzwischen ueber 20 Dateien fuer eine Seite brauchen (Hauptseite/Bilder/css/js). Im Detail muss man aber unterscheiden, welche Daten man cachen sollte, und welche nicht. Die "Hauptseite" sollte nicht gecached  werden, die anderen Seiten gerne und agressiv, wenn wir einen Weg finden, dem Browser zu sagen, dass diese Dateien wg. update neu abzuholen sind. Habe im Moment keine Ahnung, wie ich das machen soll.

Z.Zt. wird nichts gecached, und der Browser fragt via ETags (==Zeitstempel) fuer alle Dateien ab, ob die sich geaendert haben. FHEMWEB antwortet meist mit nein, und die Datei wird nicht heruntergeladen. Nicht optimal, was die Geschwindigkeit betrifft, aber relativ sicher.

Nach dieser Theorie waere dein <meta> Tag ueberfluessig.
Hallo Rudi,

ich habe aktuell folgenden Fall im Dashboard:

Ich möchte gerne im Cookie speichern, welcher Tab zuletzt ausgewählt war, was erst einmal client-seitig kein Problem ist. Die Architektur des Dashboards ist so, dass bei einem kompletten Reload der Seite das Cookie auf server-Seite (im Perl-Skript, aktuell per Hand, da kein anderer Weg) ausgewertet wird und darauf basierend nur dieser Tab geladen wird. Beim Wechsel auf einen anderen wird dieser dann per AJAX nachgeladen. Das funktioniert soweit auch ganz gut. Jedoch habe ich im Chrome das Problem, dass wenn ich nicht über einen Reload gehe, sondern im Dashboard den Button "Zurück zu FHEM" betätige und dann wieder den Link zum Dashboard drücke, der Browser mir eine gecachte Seite zurück gibt und keine Server-Anfrage mehr stattfindet. Damit ist natürlich auch der ausgewählte Tab der falsche, da dieser ebenfalls aus dem Cache kommt. Ich habe mal etwas analysiert und festgestellt, dass der Browser die Seite einfach aus dem Cache zieht, ohne auch nur bei FHEM anzufragen, ob sie sich geändert hat. Da wir in FHEM keine meta-Tags bezüglich Cache mit ausgeben vermute ich daher, dass das der Grund ist.

Mit der Möglichkeit das Caching selber zu beeinflussen, könnte ich zumindest dieses Problem lösen. Eine generelle Lösung für FHEM wäre ungleich komplizierter. Wobei der Vorteil ja ist, dass FHEM den aktuellen Status kennt und sagen kann, ob sich eine Seite seid einem Zeitpunkt X geändert hat.

Gruss

Talkabout

Hallo Rudi,

das Thema hat sich erledigt. FHEMWEB hat tatsächlich einen caching-Parameter, der sowohl bei Modulen mit "FUNC" wie auch "CONTENTFUNC" beachtet wird. Für mein Problem war es einfach nur notwendig in meiner "CONTENTFUNC" eine "0" statt einer "1" zurück zu geben. Damit wird der "expires"-Header nicht gesetzt und die Seite wird nicht gecached.

Danke Dir trotzdem!

Gruss