Napisałem taki oto serwer HTTP/1.0, HTTP/1.1, z obsługą skryptów PHP: https://github.com/overcq/oux/tree/master/program/web-srv (żeby go uruchomić trzeba pobrać to: https://github.com/overcq/oux) w czymś co można nazwać rodzajem C działający na systemach uniksopodobnych.
I jeśli zaglądniecie do kodu źródłowego, to zaznaczam, że dopiero uczę się tego typu konstrukcji języka programowania :)
Kiedyś już dostałem ostrą krytykę co do nazw używanych w tym projekcie i napisałem tutaj wyjaśnienie użycia tych nazw: https://ocq430.wixsite.com/website/post/obiektowo%C5%9B%C4%87-og%C3%B3lna-w-technologii-oux
Ale wszystko jest do zmiany...
Natomiast serwer jest ukierunkowany na szybkość i bezpieczeństwo, a także zgodność z klientami www, np. Internet Explorer 3.0. ;) Ale to prawda...
Dlatego dodanie obsługi czegoś, czego jeszcze nie obsługuje, np. nagłówka Date
, wymagałoby zastanowienia się, czy ta funkcjonalność coś daje, skoro klient i tak ustawia sobie datę pobrania zasobu, a serwer przecież nie obsługuje żądania HEAD
, więc po co.
Jednak chciałbym otrzymać jakieś podpowiedzi co do następujących rzeczy (kolejność nieuporządkowana):
- Jak parsować plik konfiguracji inaczej niż teraz w conf.cx? Bo widać, że zrobiłem skonkretyzowany parser.
- Jak wyeliminować bloki
if
przy jakimś błędzie wykonujące proceduręE_reply_I_code
w srv.cx? Bo przecież obsługiwane są wszystkie możliwe błędy. - Jak pozbyć się
#ifdef
głównie w pliku srv.cx, które służą do wybierania implementacji do innych niż Linux systemów? - Jak skrócić tę długą procedurę obsługi żądania HTTP w pliku srv.cx? Bo przecież tam mam instrukcje
goto End
i korzystanie wszędzie ze zmiennych lokalnych z początku tej procedury.
Dziękuję za poświęcenie uwagi i czekam na każdego rodzaju ocenę/krytykę, a w szczególności ewentualne uruchomienie serwera, poddanie go dużemu obciążeniu i przesłanie listy błędów. W tym ostatnim przypadku: opcje konfiguracji serwera są w pliku oux-web-srv.conf i na początku plików *.cx.
No i przy okazji: jak zrobić, by w przyszłości środowisko https://github.com/overcq/oux można było pobrać osobno, a programy pobierać pojedynczo? (Używam git
.)
Serwer obsługuje:
- uruchamianie skryptów PHP przez CGI
- połączenia TLS (przy użyciu
libssl
) - HTTP persistent connections odpowiednio do HTTP/1.0 i HTTP/1.1
- teoretycznie HTTP pipelining, ale nie testowałem tego
Jeśli ktoś chce to niech poda link do tego postu dalej w celu uruchomienia serwera i przetestowania. A może czegoś brakuje jeszcze? Może uruchamiania perl
lub czegoś podobnego. Bardzo proszę o poświęcenie chwili uwagi, bo warto, ponieważ serwer już działa i to szybko działa.