Erstellen Sie einen einfachen HTTP-Server in C [closed]

Lesezeit: 5 Minuten

Benutzeravatar von Nathan H
Nathan H

Ich muss einen einfachen HTTP-Server in C erstellen. Irgendwelche Anleitungen? Verknüpfungen? Proben?

  • Genau das dachte ich

    – Rick

    6. Oktober 2008 um 22:51 Uhr

  • Das gleiche Problem hatte ich jetzt auch. ich benutzte dieser Link . Hoffe das hilft dir auch.

    – Udara SS Liyanage

    30. April 2011 um 17:09 Uhr

  • Wie wäre es mit den FAQ zum Stellen einer Frage? Sie sollten nach 3K in Rep wissen, dass dies keine echte Frage ist, wie kann es so viele positive Stimmen bekommen?

    Benutzer177800

    30. Oktober 2012 um 17:16 Uhr

  • Dies ist anscheinend eine sehr nützliche Frage. Warum ist es geschlossen?

    – McBear Holden

    6. Oktober 2017 um 15:12 Uhr

  • Ich habe die gleiche Frage bekommen und irgendwie habe ich eine unvollständige, aber sehr einfache Implementierung (unvollständig) mit C erhalten, die unter Ubuntu Linux kompiliert wird, und dachte, es wäre wertvoll, wenn ich sie hier tagge. blog.abhi.host/blog/2010/04/15/…

    – Pulathisi Bandara

    4. Februar 2018 um 19:39 Uhr


Benutzeravatar von Ates Goral
Ates Goral

Ich würde dir empfehlen, einen Blick darauf zu werfen: Ein praktischer Leitfaden zum Schreiben von Clients und Servern

Was Sie in inkrementellen Schritten umsetzen müssen, ist:

  1. Bringen Sie Ihre grundlegende TCP-Socket-Schicht zum Laufen (überwachen Sie Port/Ports, akzeptieren Sie Client-Verbindungen und senden/empfangen Sie Daten).
  2. Implementieren Sie einen gepufferten Reader, damit Sie Anfragen zeilenweise (durch CRLF getrennt) lesen können.
  3. Lesen Sie die allererste Zeile. Analysieren Sie die Methode, die Anforderungsversion und den Pfad.
  4. Implementieren Sie Header-Parsing für die Syntax „Header: value“. Vergessen Sie nicht, gefaltete Header aufzuklappen.
  5. Überprüfen Sie die Anforderungsmethode, den Inhaltstyp und die Inhaltsgröße, um festzustellen, wie/ob der Text gelesen wird.
  6. Implementieren Sie die Dekodierung von Inhalten basierend auf dem Inhaltstyp.
  7. Wenn Sie HTTP 1.1 unterstützen, implementieren Sie Dinge wie “100 Continue”, Keep-Alive, Chunked Transfer.
  8. Fügen Sie Robustheits-/Sicherheitsmaßnahmen hinzu, wie das Erkennen unvollständiger Anfragen, das Begrenzen der maximalen Anzahl von Clients usw.
  9. Schrumpfen Sie Ihren Code und öffnen Sie ihn 🙂

  • Punkt 9, besonders nachdem ich hier eine Frage gepostet habe, +1 🙂

    – Matthias

    19. November 2016 um 23:04 Uhr


  • Vielen Dank für die Bereitstellung von Konzepten anstelle von vorgefertigten Lösungen oder Links zu RFC und Sockets. Das Lesen des RFC und das Erlernen von Sockets reichen nicht aus, um einen eigenen Webserver zu erstellen, wenn Sie diese Konzepte nicht im Hinterkopf haben.

    – Stanley Sathler

    13. Dezember 2020 um 15:13 Uhr

  • Leseanfragen zeilenweise mit “ein gepuffertes Lesegerät” (daher das Speichern der Zeile in einem Puffer, bis wir ein CRLF finden), macht mir Angst vor Angriffen, die Gigabytes an Daten ohne CRLF senden. Dazu lese ich normalerweise mit ‘Zuständen’, weise die Puffer unterwegs neu zu Daten, prüfen Sie bei jedem Lesen auf Grenzwerte und senden Sie entsprechend 414. Mit Ausnahme von Punkt 2 stimme ich allen anderen Punkten zu.

    – Beispielperson

    20. Februar um 8:20 Uhr


Benutzeravatar von Adam Rosenfield
Adam Rosenfeld

Ich schlage vor, Sie schauen sich an winzig httpd. Wenn Sie es von Grund auf neu schreiben wollen, dann sollten Sie das tun gründlich lesen RFC 2616. Verwenden BSD-Sockets um auf einem wirklich niedrigen Niveau auf das Netzwerk zuzugreifen.

Benutzeravatar von Adam Davis
Adam Davis

Ein HTTP-Server ist konzeptionell einfach:

  • Öffnen Sie Port 80 zum Abhören
  • Wenn der Kontakt hergestellt ist, sammeln Sie ein paar Informationen (hauptsächlich erhalten – den Rest können Sie vorerst ignorieren)
  • Übersetzen Sie die Anforderung in eine Dateianforderung
  • Öffnen Sie die Datei und spucken Sie sie dem Client zurück

Es wird schwieriger, je nachdem, wie viel HTTP Sie unterstützen möchten – POST ist etwas komplizierter, Skripte, die Verarbeitung mehrerer Anfragen usw.

Aber die Basis ist sehr einfach.

  • Vielen Dank für die Bereitstellung von Konzepten anstelle von vorgefertigten Lösungen oder Links zu RFC und Sockets. Das Lesen des RFC und das Erlernen von Sockets reichen nicht aus, um einen eigenen Webserver zu erstellen, wenn Sie diese Konzepte nicht im Hinterkopf haben.

    – Stanley Sathler

    13. Dezember 2020 um 15:11 Uhr

Benutzeravatar von Bob Nadler
Bob Nadler

Mungo (ehemals Simple HTTP Daemon) ist ziemlich gut. Insbesondere ist es integrierbar und kompiliert unter Windows, Windows CE und UNIX.

Öffnen Sie einen TCP-Socket auf Port 80, beginnen Sie mit dem Lauschen auf neue Verbindungen, implementieren Sie Dies. Abhängig von Ihren Zwecken können Sie fast alles ignorieren. Am einfachsten können Sie für jede Anfrage dieselbe Antwort senden, was lediglich das Schreiben von Text an den Socket beinhaltet.

Schauen Sie sich nweb (Nigel’s Web Server) an, “ein kleiner, sicherer Webserver […] mit nur 200 Zeilen C-Quellcode”:

https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing&resourcekey=0-ngY0neP78dxJKlFv0PJoDQ
http://www.ibm.com/developerworks/systems/library/es-nweb/

Der Artikel enthält Pseudocode, Erklärungen und Kommentare.

EDIT: IBMs Link ist gestorben. Ich habe ein PDF der Webseite in Google Drive gespeichert. Hier ist der Code-Download:

https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing&resourcekey=0-xkbf4mv0gN1sZrhBjt86UQ

@ankusagarwal hat ein paar Änderungen vorgenommen und seine Version auf GitHub hochgeladen:
https://github.com/ankushagarwal/nweb

Ich habe meine eigenen geschrieben, die Sie verwenden können. Dieser funktioniert mit SQLite, ist Thread-sicher und ist in C++ für UNIX.

Sie sollten in der Lage sein, es auseinander zu nehmen und den C-kompatiblen Code zu verwenden.

http://code.google.com/p/mountain-cms/

1423280cookie-checkErstellen Sie einen einfachen HTTP-Server in C [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy