Zbuduj prosty serwer HTTP w C [zamknięty]

Muszę zbudować prosty serwer HTTP w C. jakieś wskazówki? Linki? Próbki?

Author: Ry-, 2008-10-07

12 answers

Proponuję rzucić okiem na tiny httpd. Jeśli chcesz napisać go od podstaw, to będziesz chciał dokładnie przeczytać RFC 2616 . Użyj gniazd BSD, aby uzyskać dostęp do sieci na naprawdę niskim poziomie.

 78
Author: Adam Rosenfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 22:13:39

Polecam zajrzeć do: praktyczny poradnik pisania klientów i Serwerów

To co musisz zaimplementować w krokach przyrostowych to:

  1. Uruchom podstawową warstwę gniazd TCP(nasłuchuj na porcie / portach, Akceptuj połączenia klienckie i wysyłaj / odbieraj dane).
  2. zaimplementuj buforowany czytnik, aby można było odczytywać żądania po jednej linii (rozdzielonej przez CRLF) naraz.
  3. przeczytaj pierwszą linijkę. Analizuje metodę, wersję żądania i / align = "left" /
  4. zaimplementuj parsowanie nagłówka dla składni "Header: value". Nie zapomnij rozkładać złożonych nagłówków.
  5. Sprawdź metodę żądania, typ zawartości i rozmiar zawartości, aby określić, jak / czy treść zostanie odczytana.
  6. implementacja dekodowania treści w oparciu o typ zawartości.
  7. Jeśli zamierzasz obsługiwać HTTP 1.1, zaimplementuj takie rzeczy jak "100 Continue", keep-alive, chunked transfer.
  8. Dodaj solidność / środki bezpieczeństwa, takie jak wykrywanie niekompletnych wniosków, ograniczenie maksymalnej liczby klientów itp.
  9. Shrink wrap your code and open-source it:)
 110
Author: Ates Goral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-12 15:10:02

Mongoose (dawniej prosty Demon HTTP) jest całkiem niezły. W szczególności jest osadzany i kompilowany pod Windows, Windows CE i UNIX.

 24
Author: Bob Nadler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-09 14:45:49

Serwer HTTP jest koncepcyjnie prosty:

  • Otwórz port 80 do nasłuchu
  • Po nawiązaniu kontaktu, Zbierz trochę informacji (zdobądź głównie - na razie możesz zignorować resztę)
  • Translate the request into a file request
  • Otwórz plik i wypluj go na klienta

Staje się trudniejsze w zależności od tego, ile HTTP chcesz obsługiwać-POST jest trochę bardziej skomplikowany, Skrypty, obsługa wielu żądań itp.

Ale baza to bardzo proste.

 24
Author: Adam Davis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-23 15:53:56

Otwórz Gniazdo TCP na porcie 80, zacznij nasłuchiwać nowych połączeń, zaimplementuj to . W zależności od twoich celów możesz zignorować prawie wszystko. W najprostszy sposób możesz wysłać tę samą odpowiedź na każde żądanie, które wymaga tylko napisania tekstu do gniazda.

 11
Author: Eclipse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 22:12:41

Spójrz na nweb (Serwer Www), " mały, bezpieczny serwer WWW [...] z tylko 200 linijkami kodu źródłowego C":

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

Artykuł zawiera pseudokody, wyjaśnienia i komentarze.

EDIT: link IBM nie działa. Zapisałem plik PDF strony na Dysku Google. Oto kod pobierz:

Https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing

@ankushagarwal wprowadził kilka zmian i przesłał swoją wersję na GitHub: https://github.com/ankushagarwal/nweb

 9
Author: XP1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-30 23:59:54

Napisałem własne, które możesz wykorzystać. Ten działa ma sqlite, jest bezpieczny dla wątków i jest w C++ Dla UNIX.

Powinieneś być w stanie wybrać go osobno i użyć kodu zgodnego z C.

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

 5
Author: Daniel A. White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 22:30:41

Http spec i Firebug były dla mnie bardzo przydatne, gdy musiałem to zrobić dla mojej pracy domowej.

Powodzenia z Twoim. :)

 5
Author: Omer van Kloeten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 22:38:50

Proponuję spojrzeć na źródło na coś w rodzaju lighttpd.

 4
Author: warren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 22:12:32

Http://www.manning.com/hethmon/ -- "Illustrated Guide to HTTP by Paul S. Hethmon" z Manning jest bardzo dobrą książką do nauki protokołu HTTP i będzie bardzo przydatna dla kogoś, kto go implementuje/rozszerza.

 2
Author: anjanb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-07 01:23:04

Używaj specyficznych dla platformy funkcji gniazd do hermetyzacji protokołu HTTP, tak jak robili to ludzie stojący za Apache.

 1
Author: arul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 22:13:26

Istnieje duplikat z większą liczbą odpowiedzi .

Jednym z nie wymienionych jeszcze kandydatów jest spserver .

 1
Author: akauppi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:45