HTTP Rensponse Header vom AVR

OP #898511
Lesenswert?

Hallo

ich möchte eine HTML-Seite im AVR erzeugen und über Ethernet am Browser 
anzeigen.

Rufe ich eine entsprechende Seite auf, dann gibt der Browser folgende 
Infos über den XPort über die RS232-Schnittstelle an den AVR:


GET /test.htm HTTP/1.1
Host: xxx.com
Connection: close
Accept-Encoding: gzip
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7
Cache-Control: no
Accept-Language: de,en;q=0.7,en-us;q=0.3
Referer: http://web-sniffer.net/


Ich möchte folgende HTML-Datei ausgeben:

<HTML>
<BODY>
Hello World!
</BODY>
</HTML>


Wie muß der HTTP Rensponse Header vom AVR aussehen? Ich würde den 
erstmal mit dem PC über die Schnittstelle simulieren. Das heißt, ich 
würde den Header in die Test-HTML-Datei mit rein packen und die Datei 
mit dem Hyperterminal über die RS232 zum XPort senden.
Gast #898526
Lesenswert?

Wenn du eine Anfrage in HTTP/1.1 bekommst und entsprechend antworten 
willst, ist hier die richtige Lektüre:
http://www.ietf.org/rfc/rfc2616.txt

Wenn du sauber arbeiten willst, musst du vor allem mal nach dem 
Schlüsselwort MUST suchen. Gibt einige Funktionen, die man nach HTTP/1.1 
unterstützen muss, um das Protokoll zu erfüllen. Auch wenn man sich was 
zurechtmurksen kann und die meisten Clients auch sehr gutmütig 
reagieren.

Als Response Header könntest du sowas schreiben:
HTTP/1.1 200 OK <muss sein>
Date: Mon, 02 Jul 2007 08:38:11 GMT <sollte man bei 1.1 angeben>
Server: AVR <kannste sonstwas schreiben oder weglassen>
Content-Length: 52959 <kann man weglassen>
Connection: close <darf dann aber diesen hier nicht vergessen>
Content-Type: text/html <sollte auch sein>
<Leerzeile>
<Inhalt>
OP #898552
Lesenswert?

Den Link zur "richtigen Lektüre" habe ich bereits zuvor gefunden. Aber 
das ist mir doch etwas zu komplex...

Hab nun mit dem Browser die Seite test2.htm aufgerufen. Auf der RS232 
kam folgendes an:


GET /test2.htm HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
application/x-shock
wave-flash, application/msword, application/vnd.ms-excel, 
application/x-icq, */*

Accept-Language: de
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET 
CLR 1.1
.4322; .NET CLR 2.0.50727)
Host: 192.168.178.21
Connection: Keep-Alive


Hab dann die Datei mit folgendem Inhalt gesendet (siehe Anhang):



HTTP/1.1 200 OK
Date: Mon, 02 Jul 2007 08:38:11 GMT
Server: AVR
Connection: close
Content-Type: text/html

<HTML>
<BODY>
Hello World!
</BODY>
</HTML>


Aber am Browser tut sich nichts. Zeigt unten immer noch "Seite 
http://192.168.178.21/test2.htm wird geöffnet" an. Da muß doch in den 
Header sicherlich noch ein Einrag rein, daß der Browser weiß, daß die 
Info für ihn ist...
Angehängte Dateien:
OP #898578
Lesenswert?

@ Andreas Schwarz:

Wie beende ich die Verbindung? Ich kann mit dem Hyperterminal nur die 
RS232 zum XPort trennen.

Wird das Trennen nicht durch den Eintrag "
Connection: close" automatisch gemacht?

Hab gerade auf "HTTP/1.0 200 OK" geändert. Ein mal ginges nun. Kann es 
leider nicht reproduzieren.
Gast #898588
Lesenswert?

Das Datum hätteste netterweise anpassen können ;-)

Andreas hat recht. Dein Browser wartet durch die Anweisung Connection: 
close darauf, dass der Server die Verbindung trennt. Er wird die Daten 
schon empfangen haben, aber fängt noch nicht mit dem Rendering an. Wenn 
du die Verbindung nicht schliessen kannst, kannst du die Content-Size 
angeben, dann weiss der Browser auch, wann Schluss ist.

Der Browser weiss, dass die Daten für ihn sind, denn er hat vorher eine 
1:1 Verbindung mittels TCP aufgebaut.

Wireshark braucht n Treiber (der ist dabei) und ist ansonsten recht 
einfach zu bedienen, wenn man nicht filtern muss.
OP #898631
Lesenswert?

Hab nun "Content-Length: 48" ergänzt. Nun zeigt der Browser den Text an, 
aber schließt nicht die Verbindung. Wenn ich den Text 2 Mal sende, dann 
wird die Verbindung geschlossen und

"Hello World! HTTP/1.0 200 OK Date:"

angezeigt.

Wie wird die Länge berechnet? Ich habe im Explorer geschaut, wie groß 
die HTML-Datei von "Hallo World" ist (48 Byte).
Ohne ne Längenangabe wäre es natürlich einfacher. Aber wenns ohne nicht 
geht???


Den Wireshark hab ich nun installiert. Welches Interfae muß ich da 
auswählen (siehe Anhang)? Hab da mal die FritzBox ausgewählt und "Start" 
gedrückt, denn da hängt ja der XPort dran. Die Verbindung zwischen 
Fritzbox und PC erfolgt über WLAN. Aber es wird nichts aufgezeichnet. 
Muß man da noch was einstellen
Angehängte Dateien:
Gast #899599
Lesenswert?

Bei Connection: keep-alive brauchst du auf jeden Fall die 
Content-Length. Die ist in bytes angegeben für die Länge des Dokumentes 
inklusive einer Leerzeile am Ende, sprich
<html>
<body>
quatsch mit sosse
</body>
</html> <-- hier ein \r\n (nicht nur \n, es muss die volle Sequenz sein)
 <-- hier noch ein \r\n.

Die Content-Length wäre jetzt 55.

In Wireshark wählst du das Interface aus, an dem dein AVR/XPort 
angeschlossen ist. Die IP Adresse des Interfaces sollte der des XPort 
ähnlich sein.
Persönliche Seite #899844
Lesenswert?

2xCRLF am Ende des HTTP Dokuments beendet nicht die Verbindung, sondern 
fügt einfach nur zwei Leerzeilen ein. Das ist also Quatsch.

Wie schon gesagt musst du die Verbindung beenden wenn keine weiteren 
Datenbytes mehr gesendet werden können/müssen. Bei allen gängigen 
Software-TCP/IP Stacks geht das auch ohne Probleme. (Ich benutze ja 
selbst den uip Stack auf meinem ENC28J60 MikroWebServer).
OP #899892
Lesenswert?

Ich hab enun die Option "On Mdm_Ctrl_In Drop" bei Disconnect Mode 
ausgewählt. Dann muß ich halt vom Controller ein Hardwaresignal 
ausgeben, wenn die Daten gesendet wurden. Damit kann ich leben.

Aber wenn doch jemand ne Idee hat, wie es ohne dieses gehen würde, wäre 
ich dankbar.
Gast #900000
Lesenswert?

@Simon

Hmm- ich wüßte jetzt ehrlich nicht was das beweisen/widerlegen sollte...
Wenn die Verbindung beendet wird, stellt der Browser die Daten natürlich 
dar - auch ohne 2 CRLF am Ende.

Außerdem sind in deinen Beispielen keine CRLF sondern nur LF.

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