Wie richtig analysiert, der eingehenden HTTP-Anfragen

habe ich eine C++ - Anwendung mithilfe von WinSck, die eine kleine (Griffe nur ein paar features, die ich brauche) http-server implementiert. Diese wird verwendet, um die Kommunikation mit der Außenwelt mithilfe von http-Anfragen. Es funktioniert, aber manchmal sind die Anfragen nicht korrekt verarbeitet werden, da die Analyse schlägt fehl. Jetzt bin ich ziemlich sicher, dass die Anforderungen werden richtig gebildet, da diese gesendet werden, die von gängigen web-Browser wie firefox/chrome oder perl/C# (die haben http modules/dll ' s).

Nach etwas debugging fand ich heraus, dass das problem in der Tat, in der die Nachricht empfängt. Wenn die Nachricht kommt mehr als nur ein Teil (es ist nicht zu Lesen in einem recv() nennen) dann manchmal das Parsen fehlschlägt. Ich habe gegangen durch zahlreiche versuche auf, wie diese zu lösen, aber es scheint nichts zu sein zuverlässig genug.

Was ich jetzt mache ist, dass ich das Einlesen, bis ich "\r\n\r\n" - Sequenz, die gibt das Ende des header. Wenn WSAGetLastError() Berichte etwas anderes als 10035 (Verbindung getrennt/fehlgeschlagen), bevor eine solche Sequenz gefunden wird, habe ich die Nachricht verwerfen. Wenn ich weiß, dass ich die ganzen header, die ich analysieren Sie diese und suchen Sie nach Informationen über die Länge des Körpers. Aber ich bin mir nicht sicher, ob diese Angaben zwingend vorgeschrieben (ich denke nicht) und was sollte ich tun, falls es keine solche Informationen - heißt es, dass es keinen Körper? Ein weiteres problem ist, dass ich nicht weiß, ob ich Aussehen sollte für eine "\r\n\r\n" nachdem der Körper (wenn Ihre Länge größer als null).

Weiß jemand, wie zuverlässig Parsen einer http-Nachricht?

Hinweis: ich weiß, es gibt Implementierungen von http-Servern gibt. Ich möchte mit meiner eigenen, aus verschiedenen Gründen. Und ja, das Rad neu erfinden ist schlecht, ich weiss das auch.

Es sei denn, Sie tun dies für Spaß, Blick in die http-parser-link-Buchse ist unten angegeben. Es sieht brilliant, und nicht davon ausgehen, entführen Sie Ihre Steckdose/was auch immer.
Tischler: ich habe es angeschaut und es sieht sehr gut aus. Aber ich wirklich brauchen, um zu schreiben, meine eigenen, die unterstützt nur ein Bruchteil der http-features und gleichzeitig kennt ein paar spezielle Befehle. Wenn ich war in der Notwendigkeit einer vollständigen http-server würde ich definitiv nicht Schreibe meine eigenen.
Beachten Sie die zur Verfügung gestellte code ist kleine und treibt keine Anforderungen an Sie. Sie können halt, ignorieren Sie, und wickeln Sie es in irgendeiner Weise, die Sie bitte per customizing die wenigen Rückrufe, die es bietet. Ich sympathisiere mit dem Wunsch, Dinge zu tun, sich selbst, aber dies wird sparen Sie Stunden der Fehlersuche und Fehler aufgrund UNVORHERGESEHENER Eingabe später auf.

InformationsquelleAutor PeterK | 2010-09-13

Schreibe einen Kommentar