String an Browser: wie leere Website erzeugen?

Gast #4923930
Lesenswert?

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";
Gast #4923941
Lesenswert?

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.
Gast #4923947
Lesenswert?

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.
Gast #4923950
Lesenswert?

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
Gast #4923955
Lesenswert?

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.
#4923956
Lesenswert?

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.
Gast #4923959
Lesenswert?

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?
#4923993
Lesenswert?

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>
Gast #4924017
Lesenswert?

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?
#4924023
Lesenswert?

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
#4924030
Lesenswert?

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.
#4924524
Lesenswert?

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
Gast #4925333
Lesenswert?

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 :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren