http, serv, html als html, wie?
-
Hallo,
Ich habe einen kleinen HTTP-Server programmiert. Der Client connected per Port 80, und danach erscheint auf dem Client (Browser) folgendes:
Content-Type: text/html<font size=12>hallo</font>
Ich will aber, dass das Zeugs in HTML Conventiert wird.
Der Code (was eher weniger bringt, denke ich):
send_msg(sock, "Content-Type: text/html"); send_msg(sock, "<font size=12>hallo</font>");
Wie ihr sehen könnt, habe ich keine HTML Seite die eingelesen wird, sondern will lediglich das mit dem HTML überprüfen.
Folgendes habe ich auch schon probiert:
send_msg(sock, "Content-Type: text/html\n\n"); send_msg(sock, "<font size=12>hallo</font>");
thx, greetz MadManager.
-
die \n\n müssen zwischen header und content stehen.
dein zweiter fehler ist, dass viele zeilen in deinem header noch fehlen.
so sieht eine session mit firefox und meinem apachen aus:
browser sendet request:
GET / HTTP/1.1 Host: 127.0.0.1:80 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: PHPSESSID = *** die musst du nicht sehen ***
apache sendet zurück:
HTTP/1.1 200 OK Date: Wed, 25 May 2005 21:53:39 GMT Server: Apache/1.3.33 (Win32) PHP/5.0.3 Connection: close Transfer-Encoding: chunked Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Index of /</TITLE> </HEAD> <BODY>...
-
Vielen Dank,
Alles klar und funktionierte auch.
Mögliche Lösung:
send_msg(sock, "HTTP/1.1 200 OK"); send_msg(sock, "Content-Type: text/html"); send_msg(sock, "\r\n\r\n"); send_msg(sock, "<font size=12>hallo</font>");
Grüsse ;).
-
schickt send_msg() selber ein \n zwischen den zeilen?
wenn nein, muss eins an den ersten header dransend_msg(sock, "HTTP/1.1 200 OK\n"); /* nach jeder headerzeile ein umbruch */ send_msg(sock, "Content-Type: text/html\n"); send_msg(sock, "\n"); /* zum content muss eine leere zeile sein */ send_msg(sock, "<font size=12>hallo</font>");
-
Hi,
Ich will nicht ecklig werden, aber wieso sollte ich es so umändern, wenn "meine" Variante genauso gut funktioniert? Mit welcher Begründung?
Gruss MadManager]x
-
mit der begründung, dass ...
- ich davon ausgehe, dass send_msg() keinen zeilenumbruch anfügt
- der HTTP standard zwischen jedem header zwecks abtrennung einen zeilenumbruch willob der standard ein \r\n oder nur \n verlangt, weiß ich selber nicht genau. probier einfach aus.
-
OK, Vielen Dank, header soweit geändert
Bei mir sieht die Situation jetzt so aus:
# ls http http.c notfound.jpg
Der Server schickt dem Client folgendes:
send_msg(sock, "<img src=\"notfound.jpg\">");
Die HTML Seite allerdings lädt das Bild notfound.jpg nicht. An was könnte es liegen? Vielen Dank für eure treue hilfe..
gruss manager]x
-
Ähm ganz einfach, woher soll er denn das Bild bekommen ?
Nur weil du das Bild im HTML Code angegeben hast, heißt das noch lange nicht, dass er auch das Bild hat. Normal müsste der Browser eine neue Connection öffnen und dann nach dem Bild fragen und du musst es zum Client schicken.
-
Also zunächst mal ist korrektes http/1.1 jeder zeilenumbruch eine /r/n folge
http://www.zvon.org/tmRFC/RFC2616/Output/chapter2.html#sub2das mit dem bild ist klar, wenn der server das bild an den browser mit Content-Type: text/html ausliefert, kann er das nicht mehr als bild interpretieren. am besten dein server schaut sich die dateiendung der angefragten datei an, und setzt dann seinen content-type header, oder du vergleichst dass auch noch mit dem accept header den der client sendet.
einfach mal bissl im rfc lesen
http://www.zvon.org/tmRFC/RFC2616/Output/index.html
-
Vielen Dank an alle beiden!!
das rfc werde ich mir zu Herzen nehmen
gruss manager]x