C# HTTP Server Opera Problem

master2k

Lt. Junior Grade
Registriert
Jan. 2003
Beiträge
382
Hallo habe einen kleinen HTTP Server in c# geschrieben der folgendes tut:

er sendet derzeit
NetworkStream stream = client.GetStream();
StreamWriter sw = new StreamWriter(stream);
sw.WriteLine("HTTP/1.1 200 OK");
sw.WriteLine("Content-Type: text/html");
sw.WriteLine();
stream.Write(daten); // zb. HTML Seite

stream.flush();


allerdings hab ich jetzt folgendes Problem: der Internet Explorer stellt die testwebsite ganz normal als HTML dar allerdings liefert mir Opera Plain Text zurück anstatt der Webseite!

hat jemand ne Ahnung was ich falsch mache?

lg

m2k
 
Zuletzt bearbeitet: (a)
Zu deiner Frage weiß ich nun nicht direkt eine Lösung, aber versuche es mal mit der Klasse System.Net.HttpListener, in dieser hast du einen Request und und eine Response, in der du schön Cookies, Headers etc. verwalten kannst - sollte für dein Projekt perfekt sein.
Vielleicht behebt es auch gleich dein Problem.
 
Hallo bagbag danke für deine antwort!

Leider hab ich schon mehr geschrieben als dass (das war nur ein kleiner auszug wie das ganze arbeitet) derzeit unterstützt der webserver bereits virtual Folders, Directory listing und größere Downloads via Streaming und ich habe keine lust alles nochmal neu zu schreiben ....

ich hätte gerne eine native lösung mit hilfe des streams, dennoch danke

lg

m2k
 
Lass doch mal mit z.B. einem Plugin wie Firebug die Antwort des gesamten HTTP-Response loggen und kopier das Ergebnis hierhin. Ich würde mal auf eine invalide HTTP-Antwort tippen.
 
hallo hab jetz mal Firefox mit firebug installiert aufgefallen ist mir dass bei firebug etwas seltsames (und aber auch für mich unerklärliche zeichen am anfang des Response zu sehen sind) :

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

der rest ist in Ordnung bis zum ende hin 1:1 das html dokument

interessant ist schreibe ich die Daten mit den streamwriter habe ich die zeichen am anfang nicht .. allerdings hab ich beim Encoding nicht so den durchblick, fehlen vermutlich irgendwelche flags damit er es richtig encodet ... aber welche?

lg

m2k
 
Zuletzt bearbeitet: (a)
Die ersten 3 Zeichen könnten die BOM von UTF-8 sein. Wenn die Daten aus einer Datei kommen, solltest du diese als UTF-8 ohne BOM speichern (Notepad++ kann das, u.a.).
 
hallo ja war das BOM was mir natürlich von keinem Editor angezeigt wurde hätte wohl mal das file im hexeditor öffnen sollen .. da ich die Daten binär einlese erklärt somit alles habe einen schnellen dirty fix angewendet:

Code:
if (data.Length > 2 && data[0] == 0xEF && data[1] == 0xBB && data[2] == 0xBF) {
sw.Write(data,3,data.Length-3);
} else {
sw.Write(data,0,data.Length);
}
sw.Flush();

allerdings gefällt mir diese lösung nur bedingt .. wenn eine binärdatei damit anfängt (was auch immer zb. eine xyz .exe Datei) was zwar sehr unwahrscheinlich ist könnte es theoretisch die Daten corrupten.

aber immerhin wird mir jetz meine testwebseite mit opera und Firefox und Internet Explorer als html angezeigt .. ist schonmal ein fortschritt :)
 
Es ist eigentlich nicht die Aufgabe deines Webservers, das BOM zu entfernen. Wenn dort jemand eine Datei mit BOM rein setzt, dann sollte das den Webserver wenig jucken und er liefert aus, was man ihm vor die Füße geworfen hat.

master2k schrieb:
allerdings gefällt mir diese lösung nur bedingt .. wenn eine binärdatei damit anfängt (was auch immer zb. eine xyz .exe Datei) was zwar sehr unwahrscheinlich ist könnte es theoretisch die Daten corrupten.


Diesen BOM-Abschneider brauchst du ja nicht auf alles anwenden (auch wenn ich ihn gar nicht anwenden würde). Du kannst ja unterscheiden, was da gerade rausgeht, schließlich wird der MIME-Type offensichtlich auch richtig gesetzt.
 
Zuletzt bearbeitet:
ja das ist eine gute Idee ich liefere einfach ein bool mit der signalisiert ob es sich um mimetype text handelt und wende dann den fix an

danke nochmals



lg

m2k
 
Zurück
Oben