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.
Sollte das Doctype nicht vor dem <html> und nicht vor den Headern kommen?
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: > Zumindest der Doctype ist an falscher Stelle, der gehört in den > HTML-Header und nicht in den HTTP-Header. oooha
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: > Wie lautet der "Befehl", die Verbindung zu schließen? Ah. Hirn geht nicht (Mönchshof sei dank). Weiß bescheid...
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:
1 | HTTP/1.0 200 OK |
2 | Content-Type: text/html |
3 | |
4 | <!DOCTYPE HTML>
|
5 | <html><body><p>Hallo</p></body></html> |
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.