Zbuduj prosty serwer HTTP w C [zamknięty]
Muszę zbudować prosty serwer HTTP w C. jakieś wskazówki? Linki? Próbki?
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.
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:
- Uruchom podstawową warstwę gniazd TCP(nasłuchuj na porcie / portach, Akceptuj połączenia klienckie i wysyłaj / odbieraj dane).
- zaimplementuj buforowany czytnik, aby można było odczytywać żądania po jednej linii (rozdzielonej przez CRLF) naraz.
- przeczytaj pierwszą linijkę. Analizuje metodę, wersję żądania i / align = "left" /
- zaimplementuj parsowanie nagłówka dla składni "Header: value". Nie zapomnij rozkładać złożonych nagłówków.
- Sprawdź metodę żądania, typ zawartości i rozmiar zawartości, aby określić, jak / czy treść zostanie odczytana.
- implementacja dekodowania treści w oparciu o typ zawartości.
- Jeśli zamierzasz obsługiwać HTTP 1.1, zaimplementuj takie rzeczy jak "100 Continue", keep-alive, chunked transfer.
- Dodaj solidność / środki bezpieczeństwa, takie jak wykrywanie niekompletnych wniosków, ograniczenie maksymalnej liczby klientów itp.
- Shrink wrap your code and open-source it:)
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.
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.
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.
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
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.
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. :)
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.
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.
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.
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 .
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