Jak mówi tytuł, chciałbym napisać serwer HTTP. Moje pytanie brzmi: jak to zrobić? Wiem, że to brzmi BARDZO ogólnie i zbyt „na wysokim poziomie”, ale w moim szaleństwie jest metoda. Odpowiedź na to pytanie powinna być, jak sądzę, agnostyczna wobec języka; czyli bez względu na to, jakiego języka używam (np. C, C ++, Java itp.), odpowiedź powinna być taka sama. Mam ogólne pojęcie o tym, jak to powinno działać:
- Otwórz gniazdo na porcie 80.
- Poczekaj, aż klient złoży żądanie.
- Przeczytaj żądanie (tj. Ta osoba chce strony „contact-us.html”).
- Znajdź i przeczytaj „contact-us.html”.
- Wyślij nagłówek HTML, a następnie wyślij treść „contact-us.html”
- Gotowy
Tak jak powiedziałem, wierzę, że to jest proces, ale nie jestem w 100% pewien. To prowadzi mnie do sedna mojego pytania. Jak lub gdzie dana osoba znajduje te informacje?
Co jeśli nie chciałbym pisać tylko na serwerze HTTP, co jeśli chciałbym napisać serwer FTP, serwer czatu, przeglądarkę zdjęć itp.? W jaki sposób osoba dowiaduje się, jakie dokładnie kroki / proces są potrzebne do utworzenia działającego serwera HTTP?
Współpracownik powiedział mi o nagłówku HTML, więc NIGDY nie wiedziałbym tego bez niego. Powiedział także coś o przekazaniu każdej prośby do nowego wątku. Czy jest jakaś duża książka o tym, jak to działa? Czy istnieje instrukcja obsługi serwera HTTP?
Próbowałem google „jak działa serwer HTTP”, ale jedyne odpowiedzi, jakie mogłem znaleźć, były skierowane do przeciętnego Joe, a nie do osoby, która chce zaprogramować serwer HTTP.
źródło
Odpowiedzi:
Użyj RFC2616 , Luke!
Czytasz RFC 2616 na HTTP / 1.1 i idziesz na to.
To był właściwie projekt na trzecim roku w szkole inżynierskiej, i to w zasadzie opis projektu.
Przybory
Twoje narzędzia to:
Rozważania na temat zabawy
Rzeczy do rozważenia dla dodatkowej zabawy:
Baw się dobrze. To bardzo fajna rzecz do oglądania.
Inne (prostsze) sugestie
Najpierw są o wiele łatwiejsze do rozwiązania, a ich RFC są o wiele łatwiejsze do strawienia (cóż, IRC ma kilka dziwnych części, ale FTP jest dość wyraźny).
Wybór języka
Oczywiście niektóre szczegóły implementacji będą w dużym stopniu zależne od języka i stosu używanego do implementacji. Podszedłem do tego wszystkiego w C, ale jestem pewien, że może być równie fajnie w innych językach (ok, może nie tak fajnie, ale nadal fajnie).
źródło
You still have lots of room for your architecture design, but it's a pretty good and directive spec.
Ty:yes and no
. Myślę, że już się zawęziliśmy, niż RFC to nie wszystko. I myślę, że to OP musi odkryć te rzeczy, zamiast bezpośrednio wskazywać je bardziej niż to, co już zrobiłem w sekcjach „dodatkowe uwagi” i inne rzeczy. To część zabawy.Każdy z protokołów używanych w Internecie jest określony w co najmniej jednym dokumencie publicznym zwanym RFC. Wszystkie obecne RFC można znaleźć na stronie http://www.rfc-editor.org/ , która ma również funkcję porządnego wyszukiwania.
Na przykład protokół HTTP (wersja 1.1) jest określony w RFC2616, a protokół FTP jest określony w RFC959 .
Według specyfikacji, RFC są, moim zdaniem, bardzo dobrze czytelne.
źródło
In 2014, RFC2616 was replaced by multiple RFCs (7230-7237).
. Jak więc znaleźć zaktualizowane RFC, jeśli są obecne? Czy powinienem sprawdzićObsoleted by
listę?