Martin Stanka: wie wird eine POST-anfrage in HTTP eingebettet

Hi,

ich habe einen kleinen Webserver, der in C programmiert ist, und auf dem ich CGI-funktionalitäten zur Verfügung stellen muss.
Nun möchte ich ein Formular verarbeiten, und schicke dieses deswegen mit POST zurück an den Webserver.
Jetzt ist meine Frage, wie diese Message aussieht, nachdem ich die (Ethernet-)header entfernt habe.
also rein der Datenblock, der übers Netz verschickt wurde. ist da ausser z.b. der Zeile
formulardiv.htm?SAL1=100&ART1=1 noch irgendwas enthalten? kommt der Teil mit der html-seite überhaupt, oder fängt die nachricht damit an: SAL1=100

vielen Dank für eure Hilfe, und ich hoffe, die Einordnung war halbwegs richtig

tschö Martin

  1. Jetzt ist meine Frage, wie diese Message aussieht, nachdem ich die (Ethernet-)header entfernt habe.
    also rein der Datenblock, der übers Netz verschickt wurde. ist da

    Installiere dir einen Sniffer wie den Distinct Network Monitor und schau in die Päckchen. Du wirst alles sehen, was Du brauchst.

    1. Moin!

      Installiere dir einen Sniffer wie den Distinct Network Monitor und schau in die Päckchen. Du wirst alles sehen, was Du brauchst.

      Insbesondere ist die Art, wie POST verschickt wird, uninteressant für die CGI-Umgebungs-Implementierung. Die Spezifikation fordert, dass gesendete POST-Daten dem CGI-Programm auf der Standardeingabe zur Verfügung gestellt werden müssen (und irgendeine Content-Length-Variable, die im Header steht, gesetzt werden muß).

      Wenn der Webserver das nicht macht, hat er keine CGI-Schnittstelle.

      - Sven Rautenberg

      --
      "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
      (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
      1. Hi,

        Insbesondere ist die Art, wie POST verschickt wird, uninteressant für die CGI-Umgebungs-Implementierung.

        Wenn der Webserver das nicht macht, hat er keine CGI-Schnittstelle.

        Mein Webserver hat keine CGI-Schnittstelle, aber ich programmiere diese, besser gesagt möchte einen bestimmt festgelegten teil von CGI (das Auslesen von Formularen und schreiben dieser Daten in Variablen)
        implementieren. Im Moment durchsuche ich die kommpletten zurückgesendeten Daten mit einer Stringsearch-funktion, aber da ich ab jetzt mehr als einen Parameter im Formular festlege, muss ich mich mit dem genauen Aufbau dieser beschäftigen, um alle Parameter auslesen zu können

        thanx

        Martin

        1. Moin!

          Mein Webserver hat keine CGI-Schnittstelle, aber ich programmiere diese, besser gesagt möchte einen bestimmt festgelegten teil von CGI (das Auslesen von Formularen und schreiben dieser Daten in Variablen) implementieren. Im Moment durchsuche ich die kommpletten zurückgesendeten Daten mit einer Stringsearch-funktion, aber da ich ab jetzt mehr als einen Parameter im Formular festlege, muss ich mich mit dem genauen Aufbau dieser beschäftigen, um alle Parameter auslesen zu können

          Wie HTTP funktioniert, steht in der relevanten RFC. Wenn du einen Webserver programmieren willst, wirst du dich damit zwingend auseinandersetzen müssen - insbesondere, weil dein Webserver grundsätzlich ja auf alle möglichen Clients treffen kann, und nicht nur auf den IE.

          Und das Implementieren einer CGI-Schnittstelle ist (so hat mir ein Thread, der jetzt im Archiv steckt, verraten) nicht wirklich schwierig. Der Webserver ist verpflichtet, gewisse Umgebungsvariablen zur Verfügung zu stellen und eben die Standardeingabe mit den Daten aus POST zu füttern, sowie das Ergebnis des Skripts auf der Standardausgabe entgegenzunehmen. Wenn du eine CGI-Schnittstelle vollständig implementierst, hast du gleich den Vorteil, dass dein Webserver mit allen möglichen Perl-, PHP- und sonstigen Skripten inklusive natürlich aller sonstigen CGI-fähigen Programme klarkommt.

          Unbenommen bleibt dir natürlich, gewisse Funktionen fest zu integrieren. Nur bist du dann eben durch Lesen der entsprechenden RFC gezwungen, für eine korrekte Implementierung von HTTP zu sorgen. Verlaß' dich bloß auf nichts, was man durch "Hingucken" meint herausfinden zu können. Damit fällt man üblicherweise rein.

          http://www.faqs.org/rfcs/rfc2616.html hat mir Google schnell auf "rfc http" geliefert.

          - Sven Rautenberg

          --
          "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
          (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
          1. Hi,

            Wie HTTP funktioniert, steht in der relevanten RFC. Wenn du einen Webserver programmieren willst, wirst du dich damit zwingend auseinandersetzen müssen -

            klar, hab ich auch schon, wenn auch noch nicht SO intensiv, nur wie eine POST-Frage genau aussieht, hab ich noch nicht gefunden. aber ich schau nochmal in der RFC und im Archiv nach, das hört sich so an, wie wenns das ist was ich suche. (hast du mir vielleicht noch den direkten link auf den archivierten Thread, sonst such ich selber, aber falls du den grad noch rumliegen hast)

            »»Wenn du eine CGI-Schnittstelle vollständig implementierst,

            ich werde leider nur ganz gewisse teile implementieren können, da der Webserver auf nem Microcontroller läuft.

            vielen Dank für die Hilfe, ich denke, damit sollte ich weiterkommen

            tschö Martin