OUX/C+ web-srv — serwer HTTP, proszę o \"dobre\" rady :)

0

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.

1

Dlaczego takie dziwne rozszerzenie? Ogłupia to tylko kolorowanie składni. Nazwy funkcji i zmiennych faktycznie kompletnie dla mnie nieczytelne, tak samo dość dziwne wydaje się formatowanie kodu, choć to jest przynajmniej konsekwentne (z tego co zauważyłem).

Jeśli chodzi o gita, powiedz mi co mówi ta historia zmian:

0

Serwer oprócz HTTP/1.0 I HTTP/1.1 obsługuje teraz również HTTP/2.
Jednak w przeglądarce Chromium obsługuje tylko jedno żądanie, a przy kolejnym, wewnętrznym (np. plik CSS lub Javascript ze strony HTML) przeglądarka nie podaje nagłówka “:authority” i serwer zwraca błąd 400. Jak to rozwiązać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1