Forum: Mikrocontroller und Digitale Elektronik RASPI HTML Refresh serverseitig


von HTML Fragender (Gast)


Lesenswert?

Hallo,

mit einem raspi /Apache stelle ich eine Webseite zur Verfügung.
Selten ändert sich das was.
Alle paar Stunden ein paar Ascii Zeichen.

Wie kann ich serverseitig realisieren, dass sich die Webansicht der 
Clients (Webbrowser, alles was es so gibt) dann auch refreshed?
Den Server neustarten bringt nichts.
Clientseitig habe ich keinen Einfluss.

Es geht dabei um eine kleine Informationstafel mit einfacher 
Darstellung.


Danke

von Jack V. (jackv)


Lesenswert?

Am einfachsten ließe sich das via JS erledigen. Das ist zwar entgegen 
der Anforderung clientseitig, aber von der Serverseite aus hast du 
ansonsten keinen Einfluss auf den Client.

Nachtrag: es gäbe auch noch <meta http-equiv="refresh" content="[Zeit in 
s]">

: Bearbeitet durch User
von Jemand (Gast)


Lesenswert?

Der Server kann den Client nicht von sich aus kontaktieren.
Du kannst wie hier: https://stackoverflow.com/a/10944561 mit einer Zeile 
JS periodisch die Seite neuladen.
Oder eine Websocket-Verbindung offen lassen, um dem Client Bescheid zu 
geben, dass sich was geändert hat. Hätte den Vorteil, dass du auch nur 
die paar veränderten Byte aktualisieren kannst. Aber den Nachteil, dass 
die ganze Zeit eine Verbindung besteht.

von Dirk B. (dirkb2)


Lesenswert?

Wie schnell soll denn die Änderung angezeigt werden?

von HTML Fragender (Gast)


Lesenswert?

Dirk B. schrieb:
> Wie schnell soll denn die Änderung angezeigt werden?

Nicht zeitkritisch, in ein paar Minuten.
Problem ist auch das es eine Hilfskraft über MS Publisher .o.ä. 
erledigen soll. Die überschreiben dann den HTML /JS Code ;-(.

Wenn es da ein Stück Software für ein paar € gibt, wäre das auch ok.
Das ist ja nun keine Nische, aktualisierende Webseiten durch Laien 
auffrischen zu lassen.

Wenn dafür extra ein CMS wie Joomla et erforderlich ist, wäre es auch 
ok.
Oder eine MS Sharepoint Seite??

von Jemand (Gast)


Lesenswert?

Kann man bei der Software nicht einstellen, dass sie ein Template nehmen 
soll? Dann kannst du den HTML Tag dort unterbringen.
Im Notfall kannst du die generierte Seite auch nicht direkt anzeigen, 
sondern in eine andere Seite einbetten, die dann die Reload-Logik 
enthält.

von HTML Fragender (Gast)


Lesenswert?

Jemand schrieb:
> Kann man bei der Software nicht einstellen, dass sie ein Template nehmen

Es gibt keine "Software"

von Jemand (Gast)


Lesenswert?

HTML Fragender schrieb:
> Jemand schrieb:
>> Kann man bei der Software nicht einstellen, dass sie ein Template nehmen
>
> Es gibt keine "Software"

Ich meinte den von dir angesprochenen MS Publisher oder Alternativen, 
war zugegebenermaßen etwas missverständlich.

von Achim M. (minifloat)


Lesenswert?

Wie wäre es mit einer Seite (1), die nur einen div-Container mit einer 
Seite (2) enthält, der dann per Javascript periodisch neu geladen wird?

Als (2) wird die Publisher-Seite, die an einem festen Ort liegen muss, 
geladen.

Die Seite (1) darf eben nicht angefasst werden, kann auf dem Webserver 
im root liegen.

Das ganze dann mit einer bebilderten Anleitung und notfalls einem 
Skript, dass die Seite (1) wieder durch Default ersetzt.

mfg mf

von Micro (Gast)


Lesenswert?

Achim M. schrieb:
> div-Container

Was ist ein div Container?

von Micro (Gast)


Lesenswert?

Achim M. schrieb:
> Wie wäre es mit einer Seite (1), die nur einen div-Container mit einer
> Seite (2) enthält, der dann per Javascript periodisch neu geladen wird?
>
> Als (2) wird die Publisher-Seite, die an einem festen Ort liegen muss,
> geladen.

Das hört sich nach einem guten Plan an.
Ich verstehe es aber nicht.
Kannst Du ein Beispiel erstellen?
Damit das Konzept klarer wird.

von Achim M. (minifloat)


Lesenswert?

Micro schrieb:
> Achim M. schrieb:
>> div-Container
> Was ist ein div Container?

https://www.google.com/search?q=div+container
Aber danke für den Hinweis, ja, da hätte ich auch mal die Suchmaschine 
benutzen können. Man kann dem div einen Namen geben, damit man es 
nachher im Javascript benutzen kann. Offenbar kann man da aber nur 
umständlich oder per PHP fremde Inhalte einfügen.
Mit einem "iframe" sollte es aber gehen.

Micro schrieb:
> Das hört sich nach einem guten Plan an.
> Ich verstehe es aber nicht.
> Kannst Du ein Beispiel erstellen?

Hier steht, wie man den iframe mit Javascript aktualisiert: 
https://stackoverflow.com/questions/2064850/how-to-refresh-an-iframe-using-javascript

Hier steht, wie man die Timer-Funktionen benutzt: 
https://stackoverflow.com/questions/729921/settimeout-or-setinterval

mfg mf

von ergo70 (Gast)


Lesenswert?

meta-refresh funktioniert heute noch wie vor 20 Jahren schon:

https://www.w3schools.com/tags/att_meta_http_equiv.asp

Einfach die Seite auf sich selbst verweisen lassen.

von HTML Fragender (Gast)


Lesenswert?

Vielen Dank für die Beiträge.
Es gibt also einen oder mehrere Raspis mit Monitoren ( oder Mini PC mit 
Windoofs/ egal) wo ein Browser mit dem Betriebssystem automatisch 
gestartet wird und fest auf eine URL verweist.

Jack V. schrieb:
> Am einfachsten ließe sich das via JS erledigen. Das ist zwar entgegen
> der Anforderung clientseitig, aber von der Serverseite aus hast du
> ansonsten keinen Einfluss auf den Client

Das ist streng genommen korrekt, aber “erlaubt”.
Ich möchte nur von einer zentralen Stelle einen Refresh der geänderten 
Webseite erreichen.

Ich denke die Puzzelstücke reichen, aber wie nun alles zusammenfügen?
Die Veränderung der einfachen Webseite ( nur eine ) erfolgt durch einen 
Laien. Er ändert nur den Inhalt der Seite mit einem geeigneten Programm, 
das könnte jede geeignete Office Anwendung sein, wer einen besseren 
Weg/Editor kennt, möge das bitte sagen.

Die “ Mimik “ des refreshes muss also vom reinen Content entkoppelt 
sein, sonst wird der Laie das Konstrukt wohl schnell zerstören.
Wenn die Refresh “ Mimik “ einfach auf den Content verwaist, der ggf. an 
einer anderen Stelle steht und dort nur Fileberechtigungen zum Ändern 
existieren, wäre das Ziel m.E. erreicht.

Kann das jemand bitte nochmal kurz skizzieren, oder konkretisieren?

Vielen lieben Dank.

von Hans (Gast)


Lesenswert?

HTML Fragender schrieb:
> Kann das jemand bitte nochmal kurz skizzieren, oder konkretisieren?

Nein

von Stefan F. (Gast)


Lesenswert?

HTML Fragender schrieb:
> Ich möchte nur von einer zentralen Stelle einen Refresh der geänderten
> Webseite erreichen.

Um es nochmal auf den Punkt zu bringen: Das geht nicht. Beim HTTP 
Protokoll gibt es keine Möglichkeit, wo der Server dem Browser irgend 
etwas aktiv senden kann.

Der Browser muss sich die Updates holen. Damit der Bildschirm nicht 
unnötig oft flackert, kann man ein AJAX Script (siehe Wikipedia) 
verwenden, was den Server in regelmäßigen Intervallen fragt "Hast du was 
neues für mich?". Und wenn ja, dann kann es dieses Update holen oder die 
ganze Seite neu laden.

Wenn es um kurze Intervalle (<1min) geht, kann der Server seine Antwort 
auch verzögern:

> "Hast du was neues für mich"?
< moment ...
< "ja jetzt schon" / "nein, leider nicht"

Bis zu eine Minute kann der Browser warten (mit Tricks geht auch mehr, 
aber nicht immer und überall. Lasse es besser sein).

Es gibt dazu standardisierte Techniken wie SSE und Websockets, die beide 
jedoch auf dem gleichen Prinzip beruhen. Du kommst nicht umhin, dass der 
Browser eine Verbindung zum Server aufbauen muss.

von Ergo70 (Gast)


Lesenswert?

Oder man baut dafür einen speziellen Browser, dem man über einen zweiten 
Kanal mitteilen kann, wann ein refresh nötig ist. Nur mit HTTP und HTML 
geht es jedenfalls nicht.

von Εrnst B. (ernst)


Lesenswert?

ergo70 schrieb:
> meta-refresh funktioniert heute noch wie vor 20 Jahren schon:
>
> https://www.w3schools.com/tags/att_meta_http_equiv.asp
>
> Einfach die Seite auf sich selbst verweisen lassen.

und nachdem das ein Ersatz für "echte" HTTP-Header ist, hat der TE ja 
auch die Option, einfach echte Header zu senden.

-> Eintrag in der apache-config/.htaccess, HTML bleibt unverändert und 
kann per Frontpage/MS-Word/Notepad/whatever aktualisiert werden. Völlig 
Laien-Sicher.
1
<IfModule mod_headers.c>
2
Header set Refresh xxxxx
3
</IfModule>

: Bearbeitet durch User
von Udo (Gast)


Lesenswert?

Du kannst doch in der HTML Seite (Serverseitig) ein Refresh einbauen.
Der Client lädt diese Seite und der client-seitig Browser mach dann ein 
zyklisches Refresh.

Genauso kannst du in der HTML Seite (Serverseitig) ein Ajax-Objekt 
einbauen, welches dazu führt, dass der client-seitig Browser die 
änderungs-relevanten Teile zyklisch neu lädt.

von HTML Fragender (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Um es nochmal auf den Punkt zu bringen: Das geht nicht. Beim HTTP
> Protokoll gibt es keine Möglichkeit, wo der Server dem Browser irgend
> etwas aktiv senden kann.

Erst mal danke für die Antwort.
Was mir gerade aber sehr negativ erscheint, ist Deine Antwort.
Hier im Forum wirft man Dir an einigen Stellen "krankhaftes 
Geltungsbedürfnis" vor. Dazu kann ich mich nicht äußern.

Wenn Du aber offenbar völlig inkompetent "nochmal auf den Punkt" bringst 
es würde nicht gehen...dann einfach mal die Klappe halten wenn man keine 
Ahnung hat.
Keine Ahnung haben, finde ich nicht schlimm, aber so wirken zu wollen 
als hätte man diese und dann falsche Fährten zu legen, einen Thread zu 
sprengen, völlig destruktiv zu sein, das ist Kappes.
Halte Dich dann besser raus.

Die Hinweise im Thread beweisen genau das Gegenteil und es funktioniert 
übrigens auch einwandfrei!
Danke an die wirklichen Helfer.

Ich nehme mal an der Thread ist nun im Eimer, sicher wird es gleich noch 
eine Rechtfertigung geben ;-((

von Stefan F. (Gast)


Lesenswert?

HTML Fragender schrieb:
> Wenn Du aber offenbar völlig inkompetent "nochmal auf den Punkt" bringst
> es würde nicht gehen...dann einfach mal die Klappe halten wenn man keine
> Ahnung hat.

Bitte korrigiere des Sachverhalt - wenn du kannst, anstatt jetzt alle 
dumm sterben zu lassen.

Zu deiner Erleuchtung beruhen alle hier genannten Ansätze darauf, dass 
der Web Browser selbst sich die Updates in gewissen Intervallen vom 
Server holt. Also genau das, was ich schrieb.

Ich gebe dir einen Tipp: Behandle Leute, die dir helfen, mit Respekt. 
Sonst hilft dir bald keiner mehr.

von Johannes S. (Gast)


Lesenswert?

HTML Fragender schrieb:
> Was mir gerade aber sehr negativ erscheint, ist Deine Antwort.

so einen Mist kann man nur schreiben wenn man die Antwort nicht 
verstanden hat oder nicht verstehen will.
HTTP geht immer von Client Anfragen aus, das ist doch komplett richtig. 
Genau dafür wurden die Websockets entwickelt. Die tunneln ihre Daten in 
HTTP weil man meist keinen anderen Port als 80 aufmachen will. Für den 
Client sieht es jetzt dynmisch aus, aber mit einer Erweiterung die sehr 
lange in einen praktisch genutzten Standard gebraucht hat.
Es geht mit den genannten Tricks wie verzögertem ACK auch, aber das ist 
doch Murks.

Beitrag #6607504 wurde von einem Moderator gelöscht.
von Udo (Gast)


Lesenswert?

Udo schrieb:
> Du kannst doch in der HTML Seite (Serverseitig) ein Refresh einbauen.

Um nochmal zum Kern zurückzukommen: Wäre das für dich möglich?

von HTML Fragender (Gast)


Lesenswert?

Udo schrieb:
> Um nochmal zum Kern zurückzukommen: Wäre das für dich möglich?

Ja natürlich. Darauf habe ich Zugriff.

von Udo (Gast)


Lesenswert?

HTML Fragender schrieb:
> Ja natürlich. Darauf habe ich Zugriff.

Dann wäre aus meiner Sicht die Ursprungsfrage geklärt.
Einfach in die HTML Seite ein Refresh oder Ajax einbauen und fertig

PS: Mein Weltbild ist übrigens auch so, dass http-Aktionen immer vom 
Client ausgehen und der Server nicht selbständig schicken kann.

von Εrnst B. (ernst)


Lesenswert?

Udo schrieb:
> Einfach in die HTML Seite ein Refresh [...] einbauen und fertig

Warum nicht per Apache-Config/.htaccess?

das "meta-http-equiv"-Zeuchs ist ja als Workaround für Webdesigner 
gedacht, die keinen Zugriff auf die Webserver-Settings haben.
Beim TE ist's genau anders herum, er kann die Webserver-Settings 
verändern, hat aber nur begrenzten Einfluss auf den HTML-Seiteninhalt:

HTML Fragender schrieb:
> Problem ist auch das es eine Hilfskraft über MS Publisher .o.ä.
> erledigen soll. Die überschreiben dann den HTML /JS Code ;-(.

: Bearbeitet durch User
von Udo (Gast)


Lesenswert?

Εrnst B. schrieb:
> eim TE ist's genau anders herum, er kann die Webserver-Settings
> verändern, hat aber nur begrenzten Einfluss auf den HTML-Seiteninhalt
Mir hat er eben gesagt, dass er Zugriff auf die html-Seiten serverseitig 
hat.

Ich würde zyklische Refreshs nicht per Server-Konfig machen. Die würde 
ja auch nur das ausgelieferte html modifizieren... Lieber gleich in die 
Orginal-html-Quellen reinschreiben, was gemacht werden soll.
Aber viele Wege führen nach Rom :)

von Εrnst B. (ernst)


Lesenswert?

Udo schrieb:
> Die würde
> ja auch nur das ausgelieferte html modifizieren...

Nö. Das setzt einen HTTP-Header, das HTML bleibt unverändert.
Mit <meta http-equiv...> im HTML weist du den Browser an, so zu tun, als 
hätte er diesen HTTP-Header gesehen.

Aber egal, funktionieren tut beides.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.