Tworzenie serwera www z Golang

Go to świetny język do tworzenia prostych, ale wydajnych serwerów internetowych i usług internetowych. Zapewnia wbudowany pakiet HTTP, który zawiera narzędzia do szybkiego tworzenia sieci web lub serwera plików.

celem tego samouczka jest stworzenie serwera WWW, który może zaakceptować żądanie GET i obsłużyć odpowiedź. Będziemy używać serwera do serwowania plików statycznych, działając jako serwer plików. Następnie sprawimy, że serwer WWW odpowie na żądanie POST pochodzące z formularza, takiego jak FORMULARZ KONTAKTOWY.,

bez zbędnych ceregieli, zobaczmy, jak zbudować swój pierwszy serwer WWW z Go.

Setup

musisz przejść do wersji 1.11 lub wyższej, aby postępować zgodnie z tym samouczkiem.

w tej sekcji utworzymy wszystkie niezbędne pliki i ustalimy poprawną strukturę plików. Następnie zaimportujemy nasze pakiety, aby sprawdzić, czy konfiguracja działa. Nie martw się — konfiguracja jest bardzo podstawowa dla serwera internetowego Golang.

Utwórz następujące pliki i foldery zgodnie z poniższą strukturą., Plik server.go znajduje się w katalogu głównym projektu, podobnie jak folder static, który zawiera dwa pliki HTML: index.html I form.html.

- server.go- static/- - index.html- - form.html

teraz napiszmy jakiś kod. Otwórz plik server.go i zaimportuj wymagane pakiety. Będziemy używać fmtdo drukowania użytecznych danych do terminala i log do drukowania błędów krytycznych w przypadku awarii serwera www.

net/http jest najważniejszym pakietem., Zapewnia wszystkie funkcje do tworzenia klienta HTTP lub implementacji serwera, takich jak Golang Web server.

package mainimport ( "fmt" "log" "net/http")

na koniec dodajmy prostą funkcjęmain() w plikuserver.go, która wyświetla wiadomość na terminalu.

func main() { fmt.Printf("Starting server at port 8080\n")}

aby przetestować konfigurację, Uruchom fikcyjny serwer następującym poleceniem.

go run server.go

Jeśli wraz z konfiguracją, powinieneś zobaczyć następujące wyjście w terminalu.,

Starting server at port 8080

Jeśli wszystko wygląda dobrze, następnym krokiem jest utworzenie serwera www.

uruchamianie serwera www z trasami GET

na tym etapie utworzymy serwer WWW, który jest faktycznie obsługiwany na porcie 8080 i może odpowiadać na przychodzące żądania GET.

zmodyfikujmy kod w naszej funkcjimain() aby uruchomić serwer WWW na porcie 8080. MetodaListenAndServe jest eksportowana przez pakiethttp, który zaimportowaliśmy w pierwszym kroku. Ta metoda pozwala nam uruchomić web serwer i określić port do nasłuchiwania przychodzących żądań.,

zauważ, że parametr port musi być przekazany jako łańcuch poprzedzony interpunkcją dwukropka. Drugi parametr akceptuje obsługę konfiguracji serwera dla HTTP/2. Nie jest to jednak ważne dla tego samouczka, więc możemy bezpiecznie przekazać nil jako drugi argument.

 func main() { fmt.Printf("Starting server at port 8080\n") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) }}

w tym momencie serwer może się uruchomić, ale nadal nie wie, jak obsługiwać żądania. Musimy przekazać programy obsługi do serwera, aby wiedział, jak odpowiadać na przychodzące żądania i które żądania przyjąć.,

użyjemy funkcjiHandleFunc do dodania programów obsługi tras do serwera www. Pierwszy argument przyjmuje ścieżkę, dla której musi nasłuchać /hello. Tutaj każesz serwerowi nasłuchiwać wszelkich przychodzących żądań . Drugi argument przyjmuje funkcję, która przechowuje logikę biznesową, aby poprawnie odpowiedzieć na żądanie.

domyślnie ta funkcja akceptujeResponseWriter aby wysłać odpowiedź z powrotem orazRequest obiekt, który dostarcza więcej informacji o samym żądaniu., Na przykład można uzyskać dostęp do informacji o wysłanych nagłówkach, które mogą być przydatne do uwierzytelniania żądania.

jak widzisz, obsługa wysyła "Hello!” wiadomość, gdy przekazujemy tę odpowiedź do ResponseWriter.

teraz wypróbujmy tę konfigurację. Uruchom serwer www z go run server.go I odwiedź . Jeśli serwer odpowie za pomocą "Hello!" , możesz przejść do następnego kroku, w którym dowiesz się, jak dodać podstawowe zabezpieczenia do tras serwera Golang.,

Dodaj podstawowe zabezpieczenia do tras

jest rzeczą oczywistą, że bezpieczeństwo jest ważne. Przyjrzyjmy się kilku podstawowym strategiom, aby zwiększyć bezpieczeństwo serwera www Go.

zanim to zrobimy, powinniśmy poświęcić chwilę na zwiększenie czytelności naszego kodu. Utwórzmy funkcję helloHandler, która przechowuje całą logikę związaną z żądaniem /hello.

Ten program obsługi używa obiektuRequest, aby sprawdzić, czy żądana ścieżka jest poprawna. Jest to bardzo podstawowy przykład użycia obiektu Request.,

Jeśli ścieżka jest nieprawidłowa, serwer zwraca użytkownikowi błąd StatusNotFound. Aby napisać błąd do użytkownika, możesz użyć metody http.Error. Zauważ, że kod StatusNotFound odpowiada błędowi 404. Wszystkie kody statusu można znaleźć w dokumentacji Golang.

następnie dodajemy sprawdzanie w celu weryfikacji typu żądania. Jeśli metoda nie odpowiada GET, serwer zwraca nowy błąd. Po przejściu obu kontroli serwer zwraca swoją odpowiedź "Hello!".,

ostatnią rzeczą, jaką musimy zrobić, to zmodyfikować funkcjęhandleFunc w naszej funkcjimain() aby zaakceptować powyższą funkcjęhelloHandler.

http.HandleFunc("/hello", helloHandler)

poniżej znajduje się Pełny kod Twojego plikuserver.go.

następnie uruchomimy serwer WWW Go z go run server.go. Możesz przetestować swoje bezpieczeństwo, wysyłając żądanie POST do za pomocą narzędzia takiego jak Postman lub cURL.

Uruchom statyczny serwer WWW

w tym kroku utworzymy prosty serwer plików do hostowania statycznych plików., Będzie to bardzo prosty dodatek do serwera www.

aby upewnić się, że mamy zawartość do serwowania na serwerze WWW, zmodyfikujmy plikindex.html znajdujący się w folderzestatic. Aby wszystko było proste, po prostu dodaj nagłówek do pliku z napisem „Static Website.”Jeśli chcesz, możesz dodać więcej plików lub plików stylizacji, aby twój serwer WWW wyglądał nieco ładniej.

<html> <head> <title>Static Website</title> </head> <body> <h2>Static Website</h2> </body></html>

aby obsłużyć folderstatic, musisz dodać dwie linie kodu doserver.go., Pierwsza linia kodu tworzy obiekt serwera plików za pomocą funkcji FileServer. Ta funkcja przyjmuje ścieżkę w typie http.Dir. Dlatego musimy przekonwertować ścieżkę łańcuchową "./static” na typ ścieżki http.Dir.

nie zapomnij podać trasy Handle, która akceptuje ścieżkę i serwer plików. Funkcja ta działa w taki sam sposób jak funkcja HandleFunc, z niewielkimi różnicami. Więcej informacji na temat obiektu FileServer można znaleźć w dokumentacji.,

czas wypróbować kod. Uruchom serwer za pomocą go run server.go I odwiedź . Powinieneś zobaczyć nagłówek” Static Website„.

Accept a form submission POST request

wreszcie, serwer WWW musi odpowiedzieć na przesłanie formularza.

dodajmy trochę zawartości do plikuform.html w folderzestatic. Zauważ, że akcja formularza jest wysyłana do /form. Oznacza to, że żądanie POST z formularza zostanie wysłane na adres ., Sam formularz prosi o wprowadzenie dwóch zmiennych: nameoraz address.

następnym krokiem jest utworzenie obsługi, która przyjmie żądanie/form. Plik form.html jest już obsługiwany przez serwer plików i można uzyskać do niego dostęp poprzez

First, the function has to call ParseForm(), aby przetworzyć surowe zapytanie i zaktualizować r.PostForm I r.Form. To pozwoli nam uzyskać dostęp do wartości name I address za pomocą metody r.FormValue.,

na końcu funkcji zapisujemy obie wartości do ResponseWriter używającfmt.Fprintf.

nie zapomnij dodać nowej trasy obsługi formularza do funkcji main().

http.HandleFunc("/form", formHandler)

teraz pełny kod wygląda tak.

wypróbowanie obsługi formularza

możemy przetestować formularz uruchamiając serwer zgo run server.go. Po uruchomieniu serwera odwiedź . Powinieneś zobaczyć dwa pola wprowadzania i przycisk Wyślij.,

Po wypełnieniu formularza naciśnij przycisksubmit. Serwer powinien przetworzyć żądanie postu i pokazać wynik na stronie odpowiedzi , takiej jak odpowiedź poniżej.

Jeśli widzisz powyższy wynik, pomyślnie utworzyłeś swój pierwszy serwer WWW i plików Golang. Gratulacje!

Jeśli chcesz dalej odkrywać serwery internetowe Golang, dokumentacja pakietu golang HTTP jest pełna wspaniałych przykładów., Ten samouczek na temat pisania aplikacji internetowych w Go to kolejny świetny zasób, który obejmuje większość podstaw.

LogRocket: Pełna widoczność w aplikacjach internetowych

LogRocket To rozwiązanie do monitorowania aplikacji nakładki, które pozwala odtwarzać problemy, jakby miały miejsce we własnej przeglądarce. Zamiast zgadywać, dlaczego zdarzają się błędy lub prosić użytkowników o zrzuty ekranu i zrzuty dziennika, LogRocket pozwala odtworzyć sesję, aby szybko zrozumieć, co poszło nie tak., Działa doskonale z każdą aplikacją, niezależnie od struktury i posiada wtyczki do logowania dodatkowego kontekstu z Redux, Vuex i @ ngrx / store.

oprócz rejestrowania akcji i stanu Redux, LogRocket rejestruje dzienniki konsoli, błędy JavaScript, ścieżki stosu, żądania / odpowiedzi sieciowe z nagłówkami + korpusami, metadane przeglądarki i dzienniki niestandardowe. Umożliwia również DOM nagrywanie HTML i CSS na stronie, odtwarzając doskonałe piksele wideo nawet najbardziej złożonych aplikacji jednostronicowych.

Wypróbuj za darmo.

Share

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *