Ich muss einen einfachen HTTP-Server in C erstellen. Irgendwelche Anleitungen? Verknüpfungen? Proben?
Erstellen Sie einen einfachen HTTP-Server in C [closed]
Nathan H
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:
- Bringen Sie Ihre grundlegende TCP-Socket-Schicht zum Laufen (überwachen Sie Port/Ports, akzeptieren Sie Client-Verbindungen und senden/empfangen Sie Daten).
- Implementieren Sie einen gepufferten Reader, damit Sie Anfragen zeilenweise (durch CRLF getrennt) lesen können.
- Lesen Sie die allererste Zeile. Analysieren Sie die Methode, die Anforderungsversion und den Pfad.
- Implementieren Sie Header-Parsing für die Syntax „Header: value“. Vergessen Sie nicht, gefaltete Header aufzuklappen.
- Überprüfen Sie die Anforderungsmethode, den Inhaltstyp und die Inhaltsgröße, um festzustellen, wie/ob der Text gelesen wird.
- Implementieren Sie die Dekodierung von Inhalten basierend auf dem Inhaltstyp.
- Wenn Sie HTTP 1.1 unterstützen, implementieren Sie Dinge wie “100 Continue”, Keep-Alive, Chunked Transfer.
- Fügen Sie Robustheits-/Sicherheitsmaßnahmen hinzu, wie das Erkennen unvollständiger Anfragen, das Begrenzen der maximalen Anzahl von Clients usw.
- 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
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.
-
Oder verwenden Sie inetd und überspringen Sie den Netzwerkteil.
– Jrockweg
30. Dezember 2009 um 7:21 Uhr
-
tiny httpd
ist auch auf github hier: github.com/larryhe/tinyhttpd– Lila Jacke
30. August 2017 um 21:25 Uhr
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
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:
@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.
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