Forum: PC Hard- und Software Wie Webserver testen?


von Quizbart (Gast)


Lesenswert?

Guten Morgen,
ich programmiere gerade einen kleinen Webserver. Eigentlich funktioniert 
auch alles so weit... (eigentlich!) Aber ein paar Problemchen gibts 
trotzdem noch:

 - Jede 2. Seitenanfrage liefert im Browser ein "Seite konnte nicht 
gefunden werden..."-Fehler. Nach einem (oder mehreren) Refreshs 
funktionierts dann.
 - Firefox weigert sich komplett die Seiten zu laden, mit Chrome 
hingegen klappt's sehr gut.
 - usw.

Nun ist die Frage, wie ich den Problemen auf die Schliche komme. Mit dem 
Debugger klappt's nicht wirklich gut. Z.B. kommt es häufig vor, dass ich 
eine Seite aufrufe, und der der Browser meint die Seite wäre nicht 
erreichbar. Laut Debugger geht aber nicht mal HTTP Request ein...
Aber ich vermute mal, dass ich auch viele HTTP-Protokoll-spezifische 
Bugs eingebaut habe ;-) (Ungültige Header oder so)

Daher wäre es eine große Hilfe, wenn es eine Art Webserver-Tester gäbe, 
der einfach mal alles abklappert, was das HTTP-Protokoll zu bieten hat. 
Die Antworten und Timings sollen dabei geloggt und ausgewertet werden. 
Am Ende könnte dann ein Test-report anzeigen, ob sich der Webserver so 
verhält wie er sollte, oder ob/welche Probleme es gibt.

Gibt es so ein Tool?

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Hallo,

wenn es 'nur' um die Funktionalität des Webservers geht, dann reichen 
die beiden wichtigsten Logfiles aus. access.log und error.log

Was sagen den deine Logs zu den Problemen? Was fehlt dir an 
Informationen in den beiden Logfiles?

Grüße aus Berlin

von Quizbart (Gast)


Lesenswert?

Öhhh? Logfiles?
Hab ich bis jetzt noch nicht implementiert ;-)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Quizbart schrieb:
> ich programmiere gerade einen kleinen Webserver

Aus Spaß an der Freude? Da gibt es doch wohl schon für jeden Geschmack 
etwas...

Quizbart schrieb:
> und der der Browser meint die Seite wäre nicht erreichbar

Dann ist wohl einfach der Link falsch, oder dein Socket nicht offen oder 
du implementierst das keep-alive falsch...

Quizbart schrieb:
> Aber ich vermute mal, dass ich auch viele HTTP-Protokoll-spezifische
> Bugs eingebaut habe

Aha... all das sollte aber nicht zu einem 404 o.ä. Fehler führen.

Quizbart schrieb:
> wenn es eine Art Webserver-Tester gäbe

Mach doch einfach mal einen Socket zum Server auf und lass dir mittracen 
was da so alles drüber läuft...
Ansonsten: 
http://stackoverflow.com/questions/6100848/a-test-for-http-1-1-compliance

Rene Schube schrieb:
> Was sagen den deine Logs zu den Problemen?

Wenn er eine Apache Webserver nutzen würde hätte er wohl kaum diese 
Probleme...

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Warum machen die 'großen' Webserver so etwas? Weil es u.a. die 
Fehlersuche erheblich vereinfacht.

Also mach für das debuggen einen Ausgang, als Stream, aufs Display, wie 
auch immer. Guck wie es z.B. bei Apache gemacht wird.

Was kommt den bei deinem Server an? Wie sehen die Anfragen aus und wie 
unterscheiden sich die Anfragen von Firefox und Chrome?
Wie sieht der Request-Header aus?

von Quizbart (Gast)


Lesenswert?

Läubi .. schrieb:
> Wenn er eine Apache Webserver nutzen würde hätte er wohl kaum diese
> Probleme...

Da der Server auf einem C läuft, ist das wohl keine Option.

Läubi .. schrieb:
> Dann ist wohl einfach der Link falsch, oder dein Socket nicht offen oder
> du implementierst das keep-alive falsch...

Der Link ist in Ordnung. Nach mehrmaligem Refresh lädt die Seite ja 
dann. Da das ganze ganze auch beim "Erstaufruf" nach frischem 
Systemstart auftritt, wird's auch nichts mit einem Keep-Alive zu tun 
haben. Der Socket sollte (laut Debugger) ebenfalls offen sein udn auf 
eine Verbindung warten.

Läubi .. schrieb:
> Aha... all das sollte aber nicht zu einem 404 o.ä. Fehler führen.

OK, da kenn ich micht jetzt nicht so gut mit aus...

Läubi .. schrieb:
> Mach doch einfach mal einen Socket zum Server auf und lass dir mittracen
> was da so alles drüber läuft...

Gute Idee. Ich werde nachher mal den Wireshark installieren. Der 
beherrscht ja auch diverse Protokolle (sicher auch HTTP).

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Läubi .. schrieb:

> Wenn er eine Apache Webserver nutzen würde hätte er wohl kaum diese
> Probleme...

Man muss ja nicht Apache benutzen um Logfiles zu haben. Ich würde mir 
bei so einem Programm immer irgend eine Ausgabemöglichkeit einbauen. Und 
bei den Jungs von Apache kann man gut abgucken, die haben die Sachen 
immerhin richtig gut umgesetzt.

von (prx) A. K. (prx)


Lesenswert?

Quizbart schrieb:
> Da der Server auf einem C läuft,

Was zwar m.W. nirgends steht, aber möglich ist. Nur ist dann neben dem 
Webserver vielleicht auch der TCP/IP-Stack nicht voll verlässlich.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Quizbart schrieb:
> Nach mehrmaligem Refresh lädt die Seite ja dann

Dann schau doch erstmal mit einem eigenem Client (nicht wireshark) 
oder von miraus Telnet im RAW Modus ob du wenigstens die Header korrekt 
sendest (\r\n, letzte Zeile mit \r\n\r\n, korrektes Content-Length fals 
keep-alive genutzt wird etc....).
Für erste Tests ist es auch immer gut mal mit HTTP1.0 zu starten.

Quizbart schrieb:
> Da der Server auf einem C läuft

??? Meinst du µC ??? Da gibt es ja nun auch verschiedene "Stärkeklassen" 
und nun wäre es dann wirklich mal an der Zeit die genaue Systemumgebung 
zu nennen. Auch hier gibt es 100te fertiger und funktionierender 
Lösungen auf denen man aufbauen kann...

von Quizbart (Gast)


Lesenswert?

A. K. schrieb:
> Was zwar m.W. nirgends steht, aber möglich ist. Nur ist dann neben dem
> Webserver vielleicht auch der TCP/IP-Stack nicht voll verlässlich.

Ich meinte natürlich µC (das µ ist wohl verloren gegangen). Als 
TCP/IP-Stack kommt lwip zum Einsatz. Wie ich allerdings gerade gelesen 
habe, handelt es sich dabei um eine Beta. Argh!
Könnte also tatsächlich daran liegen...
Ich werde mal die Firmware des µC eine Version zurückschrauben (da ist 
dann ein stable Build des lwip drin). Vielleicht behebt das ja schon 
einige der Probleme. danke für die Idee ;-)

von Herbert (Gast)


Lesenswert?

wget oder curl ist in so einem Fall immer ganz hilfreich.
Trace kann man dann mit Wireshark erstellen und auswerten.
Man kann auch auf dem Webserver im uC tracen, welche Anfrage
er erhält bzw. welche Antworten er sendet, aber dies
beeinflusst dann meist das Timing.

von Herbert (Gast)


Lesenswert?

Quizbart schrieb:
> Ich werde mal die Firmware des µC eine Version zurückschrauben (da ist
> dann ein stable Build des lwip drin). Vielleicht behebt das ja schon
> einige der Probleme.

Ist dies so zu deuten, dass du noch keine Ahnung hast,
was intern im Programm abläuft?
Das macht die Fehlersuche dann natürlich
etwas schwer. Erstelle mal einen Wireshark Trace
von einem fehlgeschlagenen einzelnen wget Aufruf
und lade ihn irgendwo im Internet hoch (mit Link hier im Thread).

Ist dies eine private Spielerei oder soll etwas
professionelles dabei raus kommen?

von Quizbart (Gast)


Lesenswert?

Herbert schrieb:
> Ist dies eine private Spielerei oder soll etwas
> professionelles dabei raus kommen?

Keine Angst, ist eine private Spielerei.
Ich werd's nicht auf die Menschheit loslassen ;-)

Herbert schrieb:
> Ist dies so zu deuten, dass du noch keine Ahnung hast,
> was intern im Programm abläuft?

So würde ich das nicht sagen. ich setzte auf dem TCP/IP-Stack auf, und 
habe dort so gut es ging das HTTP-Protokoll implementiert. Unterhalb der 
TCP/IP-Ebene verlasse ich mich allerdings auf lwip (ich bin einfach mal 
davon ausgegangen, dass das funktioniert).

von (prx) A. K. (prx)


Lesenswert?

Hast du überhaupt schon einmal mit Wireshark reingerochen?

von Quizbart (Gast)


Lesenswert?

A. K. schrieb:
> Hast du überhaupt schon einmal mit Wireshark reingerochen?

Bisher nicht.
Das Problem ist ja, dass ich Fehler in der Kommunikation nicht unbedingt 
erkennen würde, wenn ich sie sähe. Wenn z.B. ein HTTP Header nicht ganz 
so aussieht, wie der Browser ihn erwartet, eine Antwort zu spät kommt, 
oder oder oder...
Daher hatte ich gehofft, dass es ein Tool gibt, was sowas automatisch 
untersucht und "menschenlesbar" auswertet.

Ich werd's aber nachher auf jeden Fall mal mit Wireshark probieren, 
vielleicht fällt mir doch was auf.

PS: Ich hab mir jetzt noch mal die Fehlermeldung des Browsers 
angeschaut: Dieser meldet einfach nur "Serverfehler". Ist also nicht 
wirklich hilfreich...

von (prx) A. K. (prx)


Lesenswert?

Quizbart schrieb:
> Das Problem ist ja, dass ich Fehler in der Kommunikation nicht unbedingt
> erkennen würde, wenn ich sie sähe.

Da dein Webserver nicht der einzige auf der grossen weiten Welt ist, 
stehen dir ausreichend Vergleichsexemplare zur Verfügung. Ausserdem 
können die Leutchens hier im Forum mit qualifizierteren Aussagen als 
"geht nicht" auch mehr anfangen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Quizbart schrieb:
> Serverfehler

ist doch aber nicht

Quizbart schrieb:
> Seite konnte nicht gefunden werden...

Hol dir für FF mal FireBug und schau dir da den Netzwerkverkehr an.

Quizbart schrieb:
> Das Problem ist ja, dass ich Fehler in der Kommunikation nicht unbedingt
> erkennen würde, wenn ich sie sähe

Das ist schlecht --> back to the roots und Doku lesen... oder einfach 
mal von einer Funktionierenden Verbindung (-> FireBug!) abschauen

Quizbart schrieb:
> ein HTTP Header nicht ganz so aussieht, wie der Browser ihn erwartet

s.o. es gibt nicht so wahnsinnig viele header am Anfang als man das 
nicht verstehen könnte. Mit HTTP 1.0 sind es fast gar keine mehr...

Quizbart schrieb:
> eine Antwort zu spät kommt

Ein Browser hat sehr lange timeouts... sollte für Tests keine Rolle 
spielen, außerdem sieht man das auch in FireBug.

von Quizbart (Gast)


Lesenswert?

Läubi .. schrieb:
> die Header korrekt sendest (\r\n, letzte Zeile mit \r\n\r\n

Da hast du voll ins Schwarze getroffen, hier mache ich definitiv noch 
was falsch. Da es aber manchmal funktioniert kann das ja eigentlich 
nicht das Problem sein.

Läubi .. schrieb:
> Hol dir für FF mal FireBug und schau dir da den Netzwerkverkehr an.

Kannte ich noch nicht. -> Werde ich machen!

Dann vielen Dank euch allen für die schnelle Hilfe. Ich denke jetzt habe 
ich reichlich Anregungen was ich verbessern könnte. Und eure Vorschläge 
bezüglich der Analyse-Ansätze und Tools werden sicherlich auch 
weiterhelfen.
Sollte das wider Erwarten nicht zu einer Lösung führen, wende ich mich 
nochmal an auch (dann natürlich auch mit ein paar mehr Details).

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Quizbart schrieb:
> Da es aber manchmal funktioniert

Manchmal reicht nicht. Auf diese Weise kann der Client den Request nicht 
korrekt abarbeiten und ggf. hängt irgendeine Statemachine.

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
Noch kein Account? Hier anmelden.