Hallo!
Aufbau:
-Attiny an ESP8266, im WLAN
-Webbrowser auf PC, im WLAN
Plan:
-Webbrowser ruft IP des ESP8266 auf, Attiny sendet html- String über
ESP8266 an
-Browser und erzeugt eine minimalistische Website
Stand:
-Attiny sendet String wie vorgesehen
-bei Aufruf der IP durch z.B. Hyperterminal wird html-Code korrekt
angezeigt
-bei Aufruf der IP durch Browser lädt dieser ohne Ende, kein Bildaufbau
-bei wiederholtem Senden des html-Codes wird dieser irgendwann als
reiner Text angezeigt. Auch Buttons erscheinen. Mehr und mehr, jedoch
ohne Ende.
Frage:
wie muss ich den String ändern, sodass der Browser das Nachladen
einstellt und den html-Code entsprechend anzeigt?
String:
"HTTP/1.1 200 OK\r\n<!DOCTYPE HTML>\r\nContent-Type:
text/html\r\nContent-Length: 198\r\nConnection:
close\r\n\r\n<html>\r\n\r\n<body>\r\n<p>\r\nHallo\r\n</p>\r\n</body>\r\n
</html>\r\nClient disconnected";
Falls es interessiert: "Site" ist ein englisches Wort und bedeutet
"Ort", "Platz", "Standort" oder "Stätte".
Eine "Website" ist die Summe aller HTML-Seiten, die zu einem
Web-Auftritt gehören; ein "Ort" oder "Platz" im Internet.
Siehe auch: https://de.wikipedia.org/wiki/Website
Eine "Website" ist hingegen nicht eine einzelne HTML-Datei, eine
"Seite".
Durch die lautliche Ähnlichkeit, besteht die Möglichkeit sich einen
"falschen Freund" anzulachen.
Vielen Dank für die Ausführung.
Da meine angestrebte HTML-Seite die einzige im angestrebten Web-Auftritt
sein wird, passt der Begriff Website zum Glück ja dennoch.
Stephan schrieb:> Vielen Dank für die Ausführung.> Da meine angestrebte HTML-Seite die einzige im angestrebten Web-Auftritt> sein wird, passt der Begriff Website zum Glück ja dennoch.
Vielen Dank für Dein Interesse:
Der Begriff passt dennoch nicht. Es geht dabei nicht um Einzahl oder
Mehrzahl von Dateien, sondern um ein organisatorisches, abstraktes
Gebilde.
Das Wort "Summe" ist leider von mir unglücklich gewählt. Besser wäre das
"Ganze" oder ähnliches gewesen. In dem Sinne wie man sagt, dass das
Ganze nicht die Summe seiner Teile ist. Entschuldige bitte meinen
Fehler. Aber ich hoffe es ist jetzt klar, worum es geht: "Das Ganze"
kann nicht in einer oder mehreren Dateien repräsentiert werden und also
auch nicht programmatisch erzeugt werden.
Hi,
Zumindest der Doctype ist an falscher Stelle, der gehört in den
HTML-Header und nicht in den HTTP-Header.
Die Content-Length kannst du weglassen, das ist auf dem uC in aller
Regel angenehmer.
Wird die Tcp-Verbunfung nach der Übermittlung geschlossen?
Lauscher am besten mal mit Wireshark mit, was tatsächlich passiert...
HTH,
Chris
bastel_ schrieb:> Sollte das Doctype nicht vor dem <html> und nicht vor den Headern> kommen?
Kommt es doch!
HTTP/1.1 200 OK
<!DOCTYPE HTML>
Content-Type: text/html
Content-Length: 198
Connection:close
<html>
<body>
<p>
Hallo
</p>
</body>
</html>
Client disconnected";
hownottobeseen (ohne Login) schrieb:> Die Content-Length kannst du weglassen, das ist auf dem uC in aller> Regel angenehmer.
Tatsächlich ist es eine einigermaßen umständliche Funktion geworden, die
Content-Länge vor dem Senden stets neu auszurechnen. Meine Befürchtung
war, dass die Länge explizit benötigt wird- würde ja Sinn machen, um dem
Browser mitzuteilen, auf wie viele Zeichen er warten soll. Er wartet
aber dauerhaft... bzw "überträgt" (wo nix übertragen wird.
Werde es rausnehmen.
Stephan schrieb:
[...]
> Frage:> wie muss ich den String ändern, sodass der Browser das Nachladen> einstellt und den html-Code entsprechend anzeigt?>> String:> "HTTP/1.1 200 OK\r\n<!DOCTYPE HTML>\r\nContent-Type:> text/html\r\nContent-Length: 198\r\nConnection:> close\r\n\r\n<html>\r\n\r\n<body>\r\n<p>\r\nHallo\r\n</p>\r\n</body>\r\n
</html>\r\nClient
> disconnected";
Deine Content-Length paßt nicht zum übertragenen Content und das "Client
disconnected" hat da auch nichts verloren. Außerdem mußt du (d.h.
attiny/esp8266) die Verbindung schließen, wenn du alles übertragen hast.
RFC 7230 wäre ein gutes Dokument zum Einstieg, wenn du das
durchgearbeitet hast, dann hast du zumindest schon einmal das
Basis-Framework. Mit RFC 7231 bis 7235 kommt dann der Rest, den man für
einen konformen Webserver wissen muß.
Ohne dieses Wissen solltest du dich besser an die Verwendung
existierender Webserver-Software halten, der Kram ist heutzutage nicht
mehr so simpel wie vor 25 Jahren.
Ralf D. schrieb:> Deine Content-Length paßt nicht zum übertragenen Content und das "Client> disconnected" hat da auch nichts verloren. Außerdem mußt du (d.h.> attiny/esp8266) die Verbindung schließen, wenn du alles übertragen hast.
Content- Length: WEG
Client disconneted: WEG
Verbindung schließen: wie drücke ich das im String aus?
RFC 7230: danke, ein so umfassende Beschreiung habe ich bisher nicht
gefunden. Allerdings ist sie für mein Ziel ein wenig oversized. Es geht
mir nur um die Möglichkeit, flux eine Zahl im Browser anzuzeigen.
Update: es ist erstmals geglückt, dass der Browser mit dem Laden der
HTML-Datei abgeschlossen hat. Womöglich durch einen Timeout?
Wie lautet der "Befehl", die Verbindung zu schließen?
Stephan schrieb:> Content- Length: WEG> Client disconneted: WEG
Vereinfachend kannst du auch HTTP/1.0 implementieren:
- "Content-Length" ist zwar vorgeschrieben, aber nicht zuverlässig;
- "Connection" kann auch weg, weil immer "close".
Also:
S. R. schrieb:> Vereinfachend kannst du auch HTTP/1.0 implementieren:
Saucool, hat geklappt. Danke.
Abschließend schließt der "Server" die Verbindung, der Browser zeigt die
Seite an. Eigentlich wie gewollt.
Aber:
Wenn ich nun einen submit-button einbaue... der soll nunmal einen Text
an den Server senden. Die Verbindung ist ja aber bereits geschlossen.
Ist der Browser in der Lage die Verbindung wieder aufzubauen und den mit
dem Button verbundenen "Befehl" zu senden?
Stephan schrieb:> Die Verbindung ist ja aber bereits geschlossen.> Ist der Browser in der Lage die Verbindung wieder aufzubauen und den mit> dem Button verbundenen "Befehl" zu senden?
Nein, eine geschlossene Seite kann mit dem selben Browser NIE WIEDER
geöffnet werden ... **hint*
Und woher weiß der Browser, ob ich auf der Seite noch etwas machen
möchte?
Mal im Ernst:
Der Browser öffnet meist sogar mehrere Verbindungen zu einer Webseite,
um auch Bilder etc. parallel zu holen. Und wenn die Seite geladen ist,
werden die Verbindungen auch wieder getrennt. Sollte das nicht
passieren, dann schließt der Server die nach einiger Zeit wieder.
Eine neue Anfrage öffnet neue Verbindungen. Alles Andere würde bei
Servern (und auch Browsern) zu riesigen Listen führen, welche
Verbindungen noch alle bestehen (und evtl. gar nicht mehr gebraucht
werden.)
Wenn Du Clients auseinander halten möchtest, dann funktioniert das im
lokalen Netzwerk noch über die IP-Adresse, sonst über Cookies.
Gruß
Jobst
Stephan schrieb:> Wenn ich nun einen submit-button einbaue... der soll nunmal einen Text> an den Server senden. Die Verbindung ist ja aber bereits geschlossen.
Wenn du eine URL öffnest, dann
- öffnet dein Browser eine Verbindung
- schickt eine "GET"-Anfrage hin
- empfängt Daten bis der Server die Verbindung trennt
- zeigt die Seite (die empfangenen Daten) an.
Wenn du einen Submit-Button anklickst, dann
- öffnet der Browser eine Verbindung
- schickt eine "POST"-Anfrage (mit den Formulardaten) hin
- empfängt Daten bis der Server die Verbindung trennt
- zeigt die Seite (die empfangenen Daten) an.
"Seite laden" und "Button anklicken" haben auf HTTP-Ebene also nichts
miteinander zu tun. Eine Anfrage ist unabhängig von allen anderen
Anfragen.
Hi
Weiter entfernen wir uns etwas von einer leeren Seite - wird also etwas
OT
Macht man Das heute nicht mehr? Also ne 'eigene Website' basteln?
Spielereien mit Perl und PHP?
Formulare wurde ja schon genannt und schienen unbekannt :/
MfG
S. R. schrieb:> Wenn du einen Submit-Button anklickst, dann> - öffnet der Browser eine Verbindung> - schickt eine "POST"-Anfrage (mit den Formulardaten) hin
... oder eine "GET"-Anfrage mit angehängten Daten in der URL
Patrick J. schrieb:> Weiter entfernen wir uns etwas von einer leeren Seite - wird also etwas> OT
Der Inhalt ist eigentlich bei dem Vorgang egal ...
Patrick J. schrieb:> Macht man Das heute nicht mehr? Also ne 'eigene Website' basteln?> Spielereien mit Perl und PHP?> Formulare wurde ja schon genannt und schienen unbekannt :/
Nein. Es haben ja auch immer weniger Leute eine Webseite. Sogar Firmen!
Die haben ein Profil bei FB ...
Gruß
Jobst
Jobst M. schrieb:> Nein, eine geschlossene Seite kann mit dem selben Browser NIE WIEDER> geöffnet werden ...
Genau mein Humor.
Nach kurzer Besinnung stellte ich fest, dass man ja natürlich von
Webseiten aus Verbindungen zum Server aufbaut durch jedwede Eingabe.
Ergebnis:
ich habe nun zuhause etwas, das ich "Webserver" nenne (für 0,34€, mit
0,0000005GB Speicherplatz für HTML-Seiten), programmiert, auf einem
Attiny4313, und kann von überall aus gucken, wie warm es auf meinem
Schreibtisch ist, und per Button auf der Webseite eine LED ein- und
wieder ausschalten. Ich bin sehr glücklich :)